2013-05-12 9 views

答えて

17

私はこれを適切に答えるために優雅さを持っていますが、わからないんだけど...

  • オブジェクトがクラスのインスタンスである、それは
  • 参照があるメモリ内のいくつかの場所に保存されていますオブジェクトが存在するメモリ位置へのポインタを記述するために使用されるもの。
  • 変数は、アプリケーション内のそのメモリ位置(その値は「可変」)にアクセスできる手段です。アプリケーションのライフサイクル全体を通してさまざまな場所に、変数間の単一のメモリアドレス(そのnullでない場合)にのみ指すことができ、それが変更される可能性があり、点
0

はいオブジェクト参照は、Java内の実オブジェクト

0

のメモリ位置を保持する変数であるすべてのオブジェクトは、例えば参照

Object o = "foo";

によって参照される上記の例では、参照を有し、 oをオブジェクト "foo"に追加します。

8

Javaでオブジェクト参照変数は何ですか?

単に型がオブジェクト型の変数です。すなわちjava.lang.Objectまたはサブタイプjava.lang.Objectのいずれかのタイプである。

オブジェクトのメモリアドレスは参照変数に保持されますか?

おそらくはい、おそらくいいえ。

JVMがオブジェクト参照をどのように表現するかによって異なります。ほとんどのJVMでは、オブジェクト参照は、メモリアドレスまたはポインタを使用してシーンの裏で表されるです。しかし、も配列のインデックスなどとして表現することができます。 (実際、私はオブジェクト参照が実際にポインタの配列へのインデックスだった実験JVMの周りめちゃめちゃました。)

点があるJavaオブジェクトの参照が設計さから隠すで抽象化していることあなたからの表現/実装の詳細。あなたが純粋なJavaでプログラムするかどうかは関係ありませんので、実際の表現はあなたには関係しません。あなたは純粋なJavaで実際のメモリアドレスを取得することはできません...それは良いことです。 JVM(特にガベージコレクタ)は、オブジェクトの実際のメモリアドレスをあなたに伝えることなく変更する可能性があります。アプリケーションがオブジェクトのアドレスを取得して使用することができれば、それに対処する必要があり、根本的に難しい問題です。

+0

これはきれいできれいです –

+0

参照変数の型がオブジェクト型またはそのサブクラスである場合、s1は "String s1 = new String(" string ");"さらにこのコードは、メモリ内に "string"という2つのオブジェクトs1とobjectを作成しますか? – Dexter

+0

1)厳密にはいいえ。 's1'は変数です。 's1' *はオブジェクト参照を含んでいます、2)いいえ、' s1'はオブジェクトではないからです。 1) –

1

オブジェクト参照変数は、cのポインタと似ていますが、正確にはポインタではありません。
JREは、ある種のJREをポインタと同じように扱い、いくつかのJREをポインタへのポインタとして扱います。
だからrefernce variable just define a way to reach your object。 Javaはプラットフォームに依存しない言語なので、メモリー管理は異なるデバイスでは異なるので、オブジェクトに到達するユニークな方法を提供することは困難です。

関連する問題