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 メソッドは、オブジェクトがインスタンスであるクラスの名前、アットマーク文字 `@'、およびオブジェクトのハッシュ コードの符号なし 16 進数表現で構成される文字列を返します。つまり、このメソッドは次の値に等しい文字列を返します。

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

そこにハッシュ コードがあると、同じオブジェクトへのおそらく等しい参照を簡単に見つけることができます。あなたが書く場合:

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

結果は同じでfoo1あり、foo2おそらく同じオブジェクトを参照しています。保証されているわけではありませんが、少なくとも良い指標です。この文字列形式は実際には診断にのみ役立ちます。

コードをもっと便利なものにしたい場合は、オーバーライドする必要がありますtoStringsamplethis

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