【笔记12】始终要覆盖toString

1、为什么要覆盖toString?

java.lang.Object的toString方法的实现:

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

这通常不是用户期望看到的,它返回的是类名称+“@”符号+无符号十六进制的散列码

举例:定义一个Person类

public class Person {
    private String name;
    private int age;
    private boolean sex;

    public Person(String name, int age, boolean sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    //通过比较name来判断是否为同一对象
    @Override
    public boolean equals(Object obj) {
        if (!(obj instanceof Person))
            return false;
        return name.equals(((Person) obj).name);
    }
    
    //返回name的hashcode
    @Override
    public int hashCode() {
        return name.hashCode();
    }

    public static void main(String[] args){
        Person person = new Person("John", 21, true);
        List<Person> list = new ArrayList<>();
        list.add(person);
        System.out.println("current Person: " + list.get(0).toString());
    }
}

打印输出:current Person: toString_demo.Person@23512b

提供好的toString实现可以使类用起来更加舒适,当对象被传递给println、printf、字符串联操作符(+)以及assert或者被调试器打印出来时,toString方法会被自动调用。

2、如何覆盖toString操作?

举例:对于上面的person类

@Override
public String toString() {
    return "\nname: " + name + "\nage: " + age + "\nsex: " + sex;
}

这样,如果我们要获取到person类的信息,如此调用即可:

System.out.println("current Person: " + list.get(0).toString());

3、两个建议:

1.无论是否决定指定格式,都应该在文档中明确地表明意图,通过文档注释来说明。

2.无论是否指定格式,都为toString返回值中包含的所有信息,提供一种编程式的访问途径,如使用getter方法提供。否则程序员必须去解析字符串,而这会导致大量不必要的工作量和增加程序出错的可能性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值