このコードを見てください
Integer x=new Integer(55);
Integer y=x;
y=33;
System.out.println(x);//x still prints 55 instead of 33
x
を印刷するのはなぜですか55
。
x
参照タイプなので印刷する必要があると思い33
ました..これはばかげているかもしれませんが、初めてですjava
の後y = x
、 と の両方が値 55 を含む同じ Integer オブジェクトを参照しますx
。y
しかし、この行:
y = 33;
2 つのことを行います: 値 33 を持つ Integer オブジェクトを自動的に (オートボクシング) 作成し、変数y
がその新しいオブジェクトを指すようにします。その時点で、変数x
はまだ元の整数 (55) を指しています。
注: これはプリミティブとは関係ありません。
StringBuilder x = new StringBuilder("abc");
StringBuilder y = x; //y's value is "abc"
y = new StringBuilder("def"); //y's new value is "def", but x's value still is "abc"
x
を印刷するのはなぜですか55
。
参照型なので。この行:
y=33;
これは本当に省略形です:
y = Integer.valueOf(33);
つまり、新しいオブジェクトが作成され、*y
代わりにそれを参照するようになりました。元のオブジェクトは変更されx
ず、変更されません。
y=33;
意味
y=new Integer(33);
これは、オートボクシングによって自動的に行われます。
したがって、 x は変更されません。新しい参照を に割り当てるだけですy
。
行 y=33 は、値 33 を持つ新しい整数を作成します。x は、値 55 を持つ元の整数を引き続き参照します。