0

Javaでプリミティブデータ型を調べていました。プリミティブ値は他のプリミティブ値と状態を共有しないことに言及しています。

それは私には理にかなっていますが、Javaでデータ値が実際に状態を他のデータ値と共有する例を誰かが教えてくれるかどうか疑問に思っていました. 静的変数を持つカスタム クラスを考え出すことができました。

当然、そのクラスのインスタンスはこれらの静的変数を共有するため、ある種の状態になります。しかし、JAVA が提供する非プリミティブ データ型での状態共有を具体的に示す例を探しています。

4

3 に答える 3

1

sharing statehere は、非プリミティブ変数が常にメモリ内のオブジェクトへの参照であることを意味すると思います。そして、それらのオブジェクトはそれらの変数間で「共有」されます。

つまり、非プリミティブ型でこれを使用できます。

    StringBuilder sb1 = new StringBuilder();
    StringBuilder sb2 = sb1;

    sb1.append("change thru sb1");
    sb2.append(" change thru sb2");

    // will print both modifications, since sb1 & sb2 refer to the same object
    System.out.println(sb1); 

プリミティブは常に独自のデータのコピーを維持するため、これをプリミティブで使用することはできません。

于 2014-04-01T12:13:05.683 に答える
0

このスレッドを読むことをお勧めします。

Javaでのデータ受け渡しの「問題」を描いています。

Javaは「参照渡し」または「値渡し」ですか?

于 2014-04-01T12:16:22.207 に答える
0

Java のプリミティブ データ型は、他のオブジェクトへの参照を保持しません。次に例を示します。

int a = 0;
int b = 1;

b = 2;
//a value is still 0;

Java のオブジェクト変数はオブジェクトへのポインターであるため、同じオブジェクトを参照する 2 つの変数の状態を共有できます。

Object a = new Object();
Object b = a;

b.modifySomething();
// a is modified too because they are the same object
于 2014-04-01T12:12:35.297 に答える