2013-07-02 8 views
13

私は自分自身にJavaを教えています。私の本のレビュー練習の1つは、「オブジェクト」と「オブジェクト変数」の違いについて質問しています。"オブジェクト"と "Javaのオブジェクト変数"

私はオブジェクトが何であるかを知っています(クラスの特定のインスタンス)。しかし、本の中のどこかに(オブジェクトの変数はありません)

この用語の意味を知っている人はいますか?

+27

新しい本を購入する。好ましくは、用語を構成しないもの。 –

+2

私が推測しなければならない場合、オブジェクト変数はオブジェクト参照であり、ポインタはオブジェクトが存在するメモリ位置です。 – sunrize920

+0

オブジェクト変数は、クラスの特定のインスタンスへの参照を保持するコンテナです。そうでなければ、単に "変数"または "メンバー"と呼ばれています –

答えて

9

それは、「インスタンス変数」の同義語です:

class A { 
    static int m; // <-- class variable 
    int n;   // <-- instance variable 
    ... 
} 

は明らかに、この用語はそれほど一般的に使用されていない、そしてそれは、より良いだけで、「インスタンス変数」にこだわっことによって、任意の潜在的なあいまいさを避けるためでしょう。

+0

この2つの答えのどちらが正しいと言うのは難しいです。とにかく+1新しい視点のために。 – Pshemo

+1

これは用語の適切な説明だと思います。オブジェクト変数は、オブジェクト内の独自のコピーとして保持される変数です。 – jham

+0

明確にする(私の前のコメントを編集できませんでした):上記の@arshajiiの例のクラスAのインスタンスは、オブジェクト変数 'n'の_an_ _own_コピーを所有します。 'm'の値はクラスのすべてのインスタンスに対して一度しか存在しません。 – jham

13

私は噛んでしまいます。

オブジェクトはインスタンス自体ですが、オブジェクト変数はオブジェクトへの参照です。彼の場合

Object o = new Object(); 
Object ref1 = o; 

が、オブジェクトの単一のインスタンスがあるが、それは、二つのオブジェクト変数によって参照される:

ここで不自然な例だoおよびREF1を。

オブジェクトがオブジェクト変数によって参照されなくなった場合、そのオブジェクトはガベージコレクトされます。

+0

あなたはその言葉が実際に言及しているものだと確信していますか?私はいつもそれがインスタンス変数の同義語だと考えました。 – arshajii

+0

このサイトに行くhttp://documentation.basis.com/BASISHelp/WebHelp/gridctrl/object_variables.htmあなたの答えは正しいと思っています。+1 –

+0

@VishalKここで使用されている専門用語は、BASIS固有のものです。すなわちBASISにおいて、用語「オブジェクト変数」は、一般的に他の言語およびOOPに普遍的に適用可能ではない明確かつ明確な意味を有する。 – arshajii

1

TL; DR; fmoe

私は初期の73

、(ジョン・ワイリー&サンズ、2013)オブジェクト、ケイHorstmann内で見つかったレビューの行使、ビッグJavaで同じ質問に出くわしましたケイは、オブジェクトのメモリ位置への参照を格納する変数(型がクラス)としてオブジェクト変数を定義します。

Rectangle box = new Rectangle(); 
  • ボックス新しくインスタンス化されたRectangleオブジェクトのメモリ位置への参照を格納するオブジェクト変数です。

オブジェクトのメモリ位置と同じ参照を格納する複数のオブジェクト変数が存在することがあります。オブジェクト変数が同じオブジェクトのメモリ位置を参照するためミューテータ/変異誘発方法を呼び出す

Rectangle box = new Rectangle(5,10,20,30); 
    Rectangle box2 = box; 

オブジェクトのいずれかが可変突然変異し(修正)をオブジェクト上(メソッドが呼び出されるオブジェクトを修正する)

box2.translate(15, 25); 
    System.out.println(box.getY()); // 35.0 
    System.out.println(box2.getY()); // 35.0 

Cayの定義とThe Java Tutorialsなどの情報を比較すると少し混乱しますが、これはCayの本の文脈の中に置かれたときのあなたの質問に対する答えと思われます。

私はthis perspective =>が好きです。オブジェクトのメモリ位置はオブジェクト参照(Cayごとのオブジェクト変数)に格納されています。オブジェクトのメソッドを呼び出すときは、オブジェクト参照とそれに続くドット(。)演算子のあとにメソッド名を指定します。

objectReference.method(); 

クラスのパブリックインターフェイスは、それがオブジェクトのフィールド(AKAのインスタンス変数、オブジェクト変数、クラスのメンバ変数、プロパティ、または属性をインスタンス化しています...プログラミング言語およびドキュメンテーションに応じての一つ以上へのアクセスを許可している場合)、オブジェクト参照、その後に続けてドット(。)演算子、フィールド名を指定してアクセスすることができます

objectReference.fieldName; 

私はこれをなぜ好きですか?私は変数を名詞として何回も使用するファンではありません。オーバーロードされたセマンティクスは私の単純な心を揺さぶる。

0

@Faaris Cervon:オブジェクト変数はオブジェクトを作成せず、オブジェクトを参照する変数です。 exmp:Date d1 = new Date();

d1はオブジェクトです。

date d2; d2はオブジェクトではなく、どのオブジェクトも参照しませんが、タイプdateのオブジェクトを保持できます。d2 = d1; //有効です。

したがって、d2はオブジェクト変数です。 オブジェクト変数には実際にオブジェクトが含まれていませんが、オブジェクトを参照することは重要です。

0

私はあなたにも役立つものを見つけました。 オブジェクトのような単語は、オブジェクト変数とオブジェクト参照があります。

オブジェクト変数とオブジェクト参照は、オブジェクト変数がオブジェクトの参照を格納する方法で、オブジェクト参照がオブジェクトの位置を記述する方法と似ています。

を例::

クラスの車{
....
....
}

を考える(あなたはこれだけ同じようにそれらを考慮して、ここで混同される可能性があります)車AudiQ7; // S1
車AudiQ8 =新しい車(); // S2

ここで、S1ではオブジェクトのみを作成しました。メモリを意味しないことを意味します。

S2では、オブジェクト変数/参照を作成しました。これは、メモリの場所を参照することを意味します。

関連する問題