欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

[转载] java重写toString()方法

发布时间:2025/3/11 编程问答 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 [转载] java重写toString()方法 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

参考链接: 在Java中重写toString()

前言: 在你兴高采烈的写完一个类,创建测试类时,创建对象,传入参数,调用对象,以为会得到参数值,但突然发现输出的是“ 类名@什么东东?(其实是散列码,也是16进制的哈希值哈)”,反复检查代码,但不知怎么修改。我不知道你们有没有这种情况发生,但是我经常就有,原因当然是因为不习惯重写toString方法和基础知识还不足导致的啦。还是要加油呀!所以记录一下学习的toString()方法。 

1.1 在Object类中有一个重要的方法:toString()方法。 

作用:用于返回表示对象值的字符串 

1.2 为啥要重写toString方法呢? 

Object类中的toString方法返回的是什么呢?我们打开toString源码发现: 

    public String toString() {

        return getClass().getName() + "@" + Integer.toHexString(hashCode());

    }

 

返回的字符串是:类名@散列码。 那为什么其它类的对象返回的也是这样的形式呢?因为所有的类的超类都是Object类。(可在类中按住ctrl+t查看继承关系) 

例如: 创建一个People类: 

public class People {

    private String name;

    private int age;

    public People(String name,int age) {

        this.name = name;

        this.age = age;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }

}

 

 

测试类: 

/**

 * toString方法的调用

 * @懒惰的小黑

 *

 */

public class toStringTest {

    public static void main(String[] args) {

        People p = new People("懒惰的小黑",20);

        System.out.println(p);              //p会自动调用toString方法

        System.out.println(p.toString());    //手动调用

    }

}

 

 

执行结果: com.xiaohei.text.People@279f2327 com.xiaohei.text.People@279f2327 

但是你想输出的并非是这样的结果,而是想输出对象的具体描述(name和age),所以需要在类中重写toString方法。 重写toString方法: 

    public String toString() {

        return "[name = " + getName() + ",age = "+ getAge() + "]";

    }

 

测试: 

        People p = new People("懒惰的小黑",20);

        System.out.println(p);              //p会自动调用toString方法

 

执行结果: [name = 懒惰的小黑,age = 20] 

实际上,还可以设计的更好一些。最好通过getClass().getName() + 类的描述:获取类名的字符串(地址)+类的描述。 例: 

    public String toString() {

        return getClass().getName() + "[name = " + getName() + ",age = "+ getAge() + "]";

    }

 

测试: 同上例 执行结果: com.xiaohei.text.People[name = 懒惰的小黑,age = 20] 

注意: 此处的getClass().getName()中的getName并非People类中的getName方法! 

1.3 toString方法也可供子类使用,子类只需调用super.toString()。 

例如: 创建子类: 

class Teachers extends People{

    private int salary;

    public Teachers(String name, int age,int salary) {

        super(name, age);

        this.salary = salary;

    }

    public int getSalary() {

        return salary;

    }

    public void setSalary(int salary) {

        this.salary = salary;

    }

    public String toString() {

        return super.toString() + ",salary = " + getSalary();

    }

}

 

测试: 

public class toStringTest {

    public static void main(String[] args) {

        Teachers t = new Teachers("懒惰的小黑",20,5000);

        System.out.println(t);

 

    }

}

 

 

执行结果: [name = 懒惰的小黑,age = 20],salary = 5000 

1.4 数组类型调用toString()方法 

数组继承了Object类中的toString方法,数组类型会按旧格式打印。 

例如: 

public class ArraytoStringTest {

    public static void main(String[] args) {

        int[] a = {5,6,2,1,3};

        System.out.println(a);            //自动调用toString方法

 

执行结果:[I@1f32e575 注:[I 表明是一个整形数组。 

所以我们需要调用Array.toString 方法 例如: 

import java.util.Arrays;

 

public class ArraytoStringTest {

    public static void main(String[] args) {

        int[] a = {5,6,2,1,3};

        String a1 = Arrays.toString(a);

        System.out.println(a1);

    }

}

 

 

执行结果:[5, 6, 2, 1, 3] 

说明:为什么会出现这种形式呢?按住ctrl点击toString方法,查看源码: 

    public static String toString(int[] a) {

        if (a == null)

            return "null";

        int iMax = a.length - 1;

        if (iMax == -1)

            return "[]";

 

        StringBuilder b = new StringBuilder();

        b.append('[');

        for (int i = 0; ; i++) {

            b.append(a[i]);

            if (i == iMax)

                return b.append(']').toString();

            b.append(", ");

        }

    }

 

注意:打印多维数组则需调用Arrays.deepToString()方法 

总结提醒:建议类中都要重写toString方法,方便后面程序员的调用!

总结

以上是生活随笔为你收集整理的[转载] java重写toString()方法的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。