0
String myString="Plz_help";

我开始知道“myString”不是一个对象,而是一个对象引用变量,它存储实际对象的基地址。所以'myString'应该在我执行时返回一个地址

System.out.println(myString);

但它正在将“Plz_help”返回到输出。

Myclass obj_ref_var=new Myclass();

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

4

4 回答 4

5

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

显然,您还没有toString()为您的类定义方法,这就是您获得对象类名 + 哈希码的原因。

于 2012-05-12T07:22:59.890 回答
2

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

String当您传递 a into以外的其他内容时println,它会隐式调用该事物的toString方法。默认值toStringonObject返回您所看到的,这不是地址,而是类的名称 a@对象哈希码的十六进制版本

于 2012-05-12T07:23:04.467 回答
2

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

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

但是由于您没有覆盖 的toString方法MyClass,它返回默认值toString,即类名 + 哈希码。

于 2012-05-12T07:23:52.627 回答
1

当你System.out.println()是一个对象时, println 方法检查它是否为空,如果是则打印空。如果不为空,则调用toString()对象的方法。toString()方法String覆盖方法,Object.toString()返回自身。

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

于 2012-05-12T07:23:23.860 回答