2012-05-12 70 views
0
String myString="Plz_help"; 

我开始知道'myString'不是一个对象,而是一个存储实际对象的基地址的对象引用变量。所以,当我执行为什么println打印引用对象的值而不是对象的地址

System.out.println(myString); 

,但它返回“Plz_help”到输出“的myString”应该返回的地址。

Myclass obj_ref_var=new Myclass(); 

当我为我创建的其他类使用相同的System.out.println(obj_ref_var)时,它将返回地址。

+0

请填写MyClass的完整代码。 –

回答

5

当您在对象引用上调用System.out.println时,系统会执行为此引用所引用的实际对象定义的方法toString()。对于String,此方法返回其值。

显然,您尚未定义toString()方法为您的类,这就是为什么你得到对象类名+哈希码。

+0

明白了。晶莹剔透。谢谢你andrew.started爱你:) – tez

+0

@tez不客气=) –

2

println知道String s,并输出它们的内容。

当您将除String之外的其他内容传递到println时,它隐式调用该事件的toString方法。 Object上的默认toString返回你所看到的,这是而不是的地址,而是该类的名称,@hex version of the object's hash code

+0

所以它不是一个地址。 :) – tez

1

当您的对象为System.out.println()时,println方法将检查它是否为null,如果是,则输出null。如果它不为空,则调用对象的toString()方法。 StringtoString()方法重写了Object.toString()方法,以返回自身。

无论如何,System.out.println()不打印引用,它打印对象本身。 toString()的Object的实现返回对象的类名,后面跟着它的hashCode。

2

那么,System.out.println使用该引用来调用该对象的toString方法。

由于字符串的toString()方法返回字符串本身,所以这是打印的内容。

但由于您没有覆盖MyClasstoString方法,因此它会返回缺省toString,它是classname + hashcode。

相关问题