为什么println打印引用对象的值而不是对象的地址

时间:2012-05-12 07:18:43

标签: java reference

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 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

println了解String s并输出其内容。

当您将String以外的内容传递给println时,它会隐式调用该内容的toString方法。 toString上的默认Object会返回您所看到的内容,即一个地址,而是该类的名称,@hex version of the object's hash code

答案 2 :(得分:2)

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

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

但是由于你没有覆盖toString的{​​{1}}方法,它会返回默认的MyClass,即classname + hashcode。

答案 3 :(得分:1)

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

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