我写了以下代码:
class samplethis {
int a = 6;
int b = 7;
String c = "i am";
public void sample() {
System.out.println(this);
}
}
public class thiss {
public static void main(String[] args) {
samplethis cal = new samplethis();
cal.sample();// return samplethis@1718c21
}
}
有谁知道它返回samplethis@1718c21
的原因?
答案 0 :(得分:7)
您的代码不会返回任何内容 - 打印调用this.toString()
的结果。
除非您已覆盖Object.toString()
,否则会获得default implementation:
类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@”和对象的哈希码的无符号十六进制表示组成。换句话说,此方法返回一个等于值的字符串:
getClass().getName() + '@' + Integer.toHexString(hashCode())
在那里使用哈希码可以更容易地发现可能与同一对象相同的引用。如果你写:
Foo foo1 = getFooFromSomewhere();
Foo foo2 = getFooFromSomewhere();
System.out.println("foo1 = " + foo1);
System.out.println("foo2 = " + foo2);
且结果相同,然后foo1
和foo2
可能引用同一个对象。这不是保证,但它至少是一个很好的指标 - 而且这种字符串形式实际上只是 对诊断有用。
如果您想让代码打印出更有用的内容,则需要覆盖toString
,例如(在samplethis
)
@Override
public String toString() {
return String.format("samplethis {a=%d; b=%d; c=%s}", a, b, c);
}