1

このコードを見てください

 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

4

4 に答える 4

3

の後y = x、 と の両方が値 55 を含む同じ Integer オブジェクトを参照しますxy

しかし、この行:

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"
于 2013-01-06T18:42:34.480 に答える
2

xを印刷するのはなぜですか55

参照型ので。この行:

y=33;

これは本当に省略形です:

y = Integer.valueOf(33);

つまり、新しいオブジェクトが作成され、*y代わりにそれを参照するようになりました。元のオブジェクトは変更されxず、変更されません。


※念のため、これが正しいとは限りません。しかし、それは確かに元のオブジェクトとは異なります。

于 2013-01-06T18:42:04.513 に答える
1
y=33;

意味

y=new Integer(33);

これは、オートボクシングによって自動的に行われます。

したがって、 x は変更されません。新しい参照を に割り当てるだけですy

于 2013-01-06T18:42:20.597 に答える
1

行 y=33 は、値 33 を持つ新しい整数を作成します。x は、値 55 を持つ元の整数を引き続き参照します。

于 2013-01-06T18:42:24.160 に答える