53

メソッドにローカル変数がある場合i:

int i = 10;

次に、新しい値を割り当てます。

i = 11;

これにより、新しいメモリ ロケーションが割り当てられますか? それとも元の値を置き換えるだけですか?

これは、プリミティブが不変であることを意味しますか?

4

6 に答える 6

11

Immutableオブジェクトの値が変更されるたびに、新しい参照がスタック上に作成されることを意味します。プリミティブ型の場合、不変性について話すことはできません。ラッパー クラスだけが不変です。Java はcopy_by_valuenot by reference を使用します。

プリミティブ変数または参照変数を渡す場合は違いはなく、常に変数内のビットのコピーを渡します。したがって、プリミティブ変数の場合、値を表すビットのコピーを渡し、オブジェクト参照変数を渡す場合は、オブジェクトへの参照を表すビットのコピーを渡します。

たとえば、値が 3 の int 変数を渡すと、3 を表すビットのコピーが渡されます。

プリミティブが宣言されると、its primitive type can never changeその値は変更される可能性があります。

于 2013-08-03T20:54:59.367 に答える
0

はい、それらは不変です。彼らは完全に不変です。

ここには素晴らしい説明が埋め込まれています。Go用ですが、Javaでも同じです。またはCファミリーの他の言語。

于 2013-08-03T21:07:41.340 に答える