首页 > 代码库 > 引用的“大概模样”
引用的“大概模样”
《编程导论(Java)·2.4.1 引用的涵义》
【p88】
语句System.out.println(new A())的打印输出,可以视为A对象的引用的大概模样。
因为程序员并不关心对象(在内存中)的真正位置,只要一个类的不同对象有一个能够彼此区别的数据即可,所以某个输出如OO.A@18c74,可以解读成:本引用指向“属于OO.A类的、在18c74位置”的对象。
事实上,System.out.println(new A())所做的事情是System.out.println(new A().toString())。
Q: What is the difference between System.out.println(o.toString());
andSystem.out.println(o);
?
A: Each of System.out.println(o.toString());
and System.out.println(o);
obtains and outputs object o
‘s string representation. System.out.println(o.toString());
explicitly calls toString()
, whereas System.out.println(o);
implicitly calls toString()
.
Object类定义了toString()方法,返回该对象的字符串表示。其方法头为:public String toString()
Object.toString()实现的返回值,由类名、at 标记符“@”和该对象哈希码的无符号十六进制表示组成,classname@hashcode
,
getClass().getName() + ‘@‘ + Integer.toHexString(hashCode())
由 Object 类定义的hashCode()方法会针对不同的对象而返回不同的整数,这通常是通过将该对象的内部地址转换成一个整数来实现的;但子类改写hashCode()时,并不需要将它作为后置条件。
一般而言,所有子类都应该改写此toString()方法,以一个简明又容易读懂的文本形式的字符串说明该对象。