以下のコードをご覧ください
class TestToString
{
public static void main(String args[])
{
CheckToString cs = new CheckToString (2);
CheckToString c = new CheckToString (2);
if( cs.equals(c))
System.out.println(" Both objects are equal");
else
System.out.println(" Unequal objects ");
}
}
class CheckToString
{
int i;
CheckToString ()
{
i=10;
}
CheckToString (int a)
{
this.i=a;
}
}
出力: 等しくないオブジェクト
しかし、私は出力が
両方のオブジェクトが等しい
両方のオブジェクトが異なる参照を持っていることを理解しました。
System.out.println(cs); //com.sample.personal.checkToString@19821f
System.out.println(c); //com.sample.personal.checkToString@addbf1
しかし、私は尋ねていました、なぜそれらは異なる参照を持っているのですか? 一方、以下のケースでは、オブジェクトは同じメモリ位置を持っています。
Integer a = new Integer(2);
Integer b = new Integer(2);
System.out.println(a); //2
System.out.println(b); //2
ユーザー定義クラスのオブジェクトと定義済みクラスのオブジェクトを比較しています。ユーザー定義クラスのオブジェクトは、-128 から 127 を超える値を持つ整数クラスのオブジェクトと同じように動作するようです。なぜ両方のケースで参照が異なるのですか? (-128~127の値を持つIntegerクラスも同様、ユーザー定義クラスは別)