首页 > 代码库 > 引用的“大概模样”

引用的“大概模样”

《编程导论(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()方法,以一个简明又容易读懂的文本形式的字符串说明该对象。