0

我写了以下代码:

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

4

1 回答 1

7

您的代码不会返回任何内容 - 它会打印调用的结果this.toString()

除非您已覆盖Object.toString(),否则您将获得默认实现

Object 类的 toString 方法返回一个字符串,该字符串由对象作为其实例的类的名称、at 符号字符“@”和对象哈希码的无符号十六进制表示形式组成。换句话说,此方法返回一个等于以下值的字符串:

getClass().getName() + '@' + Integer.toHexString(hashCode())

将哈希码放在那里可以更容易地发现对同一对象的可能相等引用。如果你写:

Foo foo1 = getFooFromSomewhere();
Foo foo2 = getFooFromSomewhere();
System.out.println("foo1 = " + foo1);
System.out.println("foo2 = " + foo2);

和结果是​​一样的,那么foo1foo2可能指的是同一个对象。不能保证,但它至少是一个很好的指标——无论如何,这种字符串形式实际上对诊断有用。

如果你想让你的代码打印出更有用的东西,你需要覆盖toString,例如 (in samplethis)

@Override
public String toString() {
    return String.format("samplethis {a=%d; b=%d; c=%s}", a, b, c);
}
于 2012-08-04T17:15:02.130 回答