-1

Java では、複数の参照変数で 1 つのオブジェクトを参照できます。しかし、静的を使用せずにそれをプリミティブデータ型に使用することはできませんが、それははるかに異なります.

ここ、

Rectangle r1 = new Rectangle(0, 0, 100, 50); 
           System.out.println(r1);

           Rectangle r2 = r1;

           r2.grow(10, 20);
           System.out.println(r1);
           System.out.println(r2);

プリミティブでも同じこと、

double n1 = 150;
            double n2 = n1;

            n2 = n2 * 20; 

            System.out.println(n1);
            System.out.println(n2);

しかし別行動。私はそれが違うことを知っていますが、なぜそれを知る必要がありますか?? 記憶の中はどうなっている??

4

3 に答える 3

3

変数にはが直接含まれます。プリミティブの場合、値プリミティブです。オブジェクト参照の場合、値はオブジェクトではなく参照です。

写真で:

int a = 5;

私たちに与える

+-----+
| | | |
+-----+
| | 5 |
+-----+

しかし

Foo f = new Foo();

私たちに与える

+-----+
| | ふ |
+-----+ +--------------+
| | 参照 | --------------> | Foo オブジェクト |
+-----+ +--------------+

が保持する値f参照であるため、メモリ内の別の場所を参照します。

ある変数を別の変数に割り当てる (または変数の値を関数に渡す) ときはいつでも、その変数が保持する値をコピーします。したがって、上記のようにaandfがあり、これを行う場合:

int b = a;

今、私たちは持っています

+-----+
| | | |
+-----+
| | 5 |
+-----+

+-----+
| | b |
+-----+
| | 5 |
+-----+

aにコピーされましたb

ここで、次のようにするとします。

Foo f2 = f;

f保持されるのは参照であり、オブジェクトではないことに注意してください。したがって、次のようになります。

+-----+
| | ふ |
+-----+
| | 参照|-------+
+-----+ |
              | | +-------------+
+-----+ +---------| Foo オブジェクト |
| | f2 | | | +-------------+
+-----+ |
| | 参照|-------+
+-----+

fにコピーされましたf2が、その値は参照であるため、 と の両方がメモリ内の同じオブジェクトff2 参照しています。

于 2013-10-28T10:09:09.570 に答える