【java基础】为什么重写toString()方法?
不得不说,有很多java初学者写java实体类的时候,并没有真正理解重写tostring()
方法,可能是口头知道也可能是跟风随带添加tostring()
方法,并没有真正理解其意义,如果真要被问起来未必有十足把握回答上 ~中枪了咩~,这篇文章旨在帮助初学者正确解读实体类重写tostring()
方法。
解读一:java默认的tostring方法来自object 类
在java中每个类都直接或者间接继承
object
类,tostring()
方法同样来自于object
类。
其实这不难理解,在没有重写tostring的前提下,每次执行system.out.println()
这个方法默认就会调用一个继承自object
类型对象的tostring
方法,这点是非常重要的基础前提!
解读二:重写tostring()方法的意义所在
简单一句话就是重写
tostring()
可以理解为是对对象在打印输出时候的一种格式化。这样做符合业务逻辑,显示结果人性化。
object类里的tostring只是把字符串的直接打印,数字的要转化成字符再打印,而对象,则直接打印该对象的hash码(类似@15db9742
这样的东东),它的值大概就是等于getclass().getname()+’@’+integer.tohexstring(hashcode())
,我这乔治脑袋看着都晕,hash码
这玩意是给机器看的,平凡的人类是看不懂的鸭,什么?你要挑战?你相信你就是不一样的烟火?那行,我就举个例子给你看看,你可以试着在一个实体类中...啥?你要我自己来?额...行,我来就我来....
1、编写一个叫person的实体类
public class person { private string name; private integer age; public string getname() { return name; } public void setname(string name) { this.name = name; } public integer getage() { return age; } public void setage(integer age) { this.age = age; } public person() { } public person(string name, integer age) { this.name = name; this.age = age; } }
2、编写测试类
public static void main(string[] args) { person person = new person(); person.setage(12); person.setname("不一样的烟火"); system.out.println(person); }
3、没重写tostring()方法的测试效果
4、加上tostring()方法的测试效果
现在的开发工具基本都有自动生成tostring()
方法的快捷键,我想大家都懂~
总结
1、没有重写tostring
,每执行system.out.println()
会默认调用object
的tostring
方法,情况如下:
2、重写tostring,每执行system.out.println()
会调用重写的tostring
方法,情况则会根据重写的方法打印输出成自己想得到的格式。
3、为了养成良好习惯,建议每次编写实现类都重写一下tostring()
方法!!
推荐阅读
-
Java学习总结之方法重载和方法重写
-
java创建子线程为什么要有两种方法?
-
java中为什么接口中的属性和方法都默认为public?
-
浅谈Java异常的Exception e中的egetMessage()和toString()方法的区别
-
详解java中的深拷贝和浅拷贝(clone()方法的重写、使用序列化实现真正的深拷贝)
-
Java连载57-equals重写、finalize方法、hashCode方法
-
【java基础】为什么重写toString()方法?
-
Java基础-方法
-
java基础 静态 static 问在多态中,子类静态方法覆盖父类静态方法时,父类引用调用的是哪个方法?
-
Java基础语法(构造方法,作用域修饰符)