ani*_*pic 13 java overriding class tostring
Java System.out.println()和toString()Java 之间的联系是什么?例如:
public class A {
String x = "abc";
public String toString() {
return x;
}
}
public class ADemo {
public static void main(String[] args) {
A obj = new A();
System.out.println(obj);
}
}
Run Code Online (Sandbox Code Playgroud)
如果主类运行,则输出为"abc".当我删除覆盖的代码时toString(),它给出一个输出"A@659e0bfd".那么,任何人都可以解释System.out.println()当我使用参数作为对象时的工作原理是什么?它与obj方法完全连接吗?
Ken*_*ter 14
System.out是一个PrintStream.Printstream定义了println()函数的几个版本来处理数字,字符串等.当您PrintStream.println()使用任意对象作为参数调用时,您将获得作用于该函数的函数的版本Object.这个版本的功能
...首先调用String.valueOf(x)来获取打印对象的字符串值...
看着String.valueOf(Object),我们看到它回归
如果参数为null,则字符串等于"null"; 否则,返回obj.toString()的值.
所以,长话短说,System.out.println(someObject)调用对象的toString()函数将对象转换为字符串表示.
如果你的对象定义了自己的toString()函数,那么就是这个函数.如果您不提供此类函数,那么您的对象将从toString()其父类之一继承.在最坏的情况下,它将继承Object.toString().该版本的toString()被定义为返回
一个字符串,由对象为实例的类的名称,符号字符"@"和对象的哈希码的无符号十六进制表示组成.
或者,换句话说:
getClass().getName() + '@' + Integer.toHexString(hashCode())
Run Code Online (Sandbox Code Playgroud)
因此,当您调用System.out.println()未定义其自己的toString()版本的对象时,您可能会获得Object看起来像"classname @ someHexNumber"的版本.
| 归档时间: |
|
| 查看次数: |
9197 次 |
| 最近记录: |