2016-10-03 3 views
2

私はローカル変数がjavaのスタックに格納されていることを知っています。しかし、2つのint変数にjavaの同じ値が与えられたときのスタック上のメモリ割り当てに関してはどうなりますか(それらはどう関係していますか)?書き込みセマンティックにコピーはありますか?それはどうしたらうまくいくのですか?Javaで2つのint変数に同じ値が与えられた場合、(メモリに関して)どうなるでしょうか?

+0

したがって、宣言された変数が異なるため、それぞれ4バイトのメモリが割り当てられます(SIMPLEはABCと同じです)。 –

+0

2つの変数はメモリ内の2つのスロットを意味します。スタックには、メソッドを入力するときに割り当てられます。行単位ではありません。 –

+0

==演算子は参照を比較し、同じオブジェクトが参照されている場合は真です。メモリスロットが異なる場合、intの場合==演算子はどのように動作しますか? –

答えて

4

明白な答えはint x=5; int y=5;のみ例外はあなたのケースでは、yに関連付けられていたメモリはそれがxの場合と同様に同じに見えるだろう、ということでとint x=5; int y=6;と同じにしていることです。すなわちxyは、そのうちの一つが値を変更するまでメモリの同じ部分を割り当てられている -

それは書き込みセマンティックコピーのいくつかの種類が使用されているJVMを想定することは困難です。私が知る限りでは、は、Java言語仕様で許容されているように、ですが、intとしてはあまり使用されません。書き込み時に設定するオーバーヘッドは、となります。は、はじめから。

(興味深いことに、C++ std::stringクラスに対してはコピーオンライトのセマンティクスを書くことができましたが、C++ 11ではそれが許可されていません)。

+0

==演算子は参照を比較しています同じオブジェクトが参照されていれば真です。 intの場合、==演算子はどのように機能しますか? –

+0

@AyushN:プリミティブ型では、値が比較されます。 –

0

間違いなくスタックに変数を作成します。値5を保持します。 他の方法はありません。

どれ変数グローバル/ローカル、原始的/非プリミティブ店いくつかの値

プリミティブ値のためにあなたがタイプに応じて割り当てるものは何でもいくつかあります。

非プリミティブ値はヒープ内のオブジェクトのメモリアドレスですが、最終的には両方とも値を保持し、他のいくつかの変数が同じかどうかを調べません。

関連する問題