将String转换为Object时调用toString()

Che*_*nut 3 java

这是我的示例代码:

String str = "hello";
Object obj = (Object)str;
System.out.println(obj.toString());
Run Code Online (Sandbox Code Playgroud)

我找到了Object的源代码,toString()方法是:

public String toString() {   
   return getClass().getName() + "@" + Integer.toHexString(hashCode());
} 
Run Code Online (Sandbox Code Playgroud)

我认为这个例子的结果是这个Object的地址,比如[B @ 15db9742,在我将str转换为Object之后,但它仍然打印你好.为什么?Shound not obj使用Object的方法?任何人都可以向我解释它的原理吗?

T.J*_*der 5

这是多态(特别是运行时多态).对对象的引用类型是什么(ObjectString)并不重要,只要该类型具有toString(所以你的代码编译),toString将使用的是对象本身实际拥有的那个,不一定是由您的参考类型提供.在这种情况下,String无论您对它的引用类型是什么,对象都是对象,因此String#toString使用它.