2017-08-02 4 views
1

私が勉強している1つのソースは、配列を「変数がインデックス番号でアクセスされる1つの名前の下の変数の集合」として定義しています。Javaでは、オブジェクトは変数と見なされますか?

しかし、私はあなたがオブジェクトの配列(または少なくともオブジェクトへのポインタの配列)を持つことができることに気付きました。

私はオブジェクトを変数と見なさなかったので、これは私が変数がjavaと同じように定義されているのか疑問に思いました。 Jenkovチュートリアルでは、変数を「データ値を含むことができるメモリの一部」として挙げています。

私はオブジェクトがこの定義に合っていると信じているので、オブジェクトは変数と見なされますか?

+0

いいえ、オブジェクトは変数ではありません。私は引用されたソースが不正確だと言います。 – shmosel

+0

配列がオブジェクトのコレクションであると言うのがより正確でしょうか? –

+0

配列は、オブジェクトへの参照の可変サイズの、固定サイズのインデックス付きコレクションです。 –

答えて

2

配列を呼び出す "変数のコレクション"はおそらくすでに定義を拡張していることでしょう。しかし、配列は確かに、メモリ内の異なるオブジェクトを指すようにできる参照のコレクションであり、そのような各参照を合理的に変数と呼ぶことができます。

「変数はオブジェクトです」という質問は、最初はちょっと奇妙です。 Object o = new Object()では、oは明らかに変数ですが、ヒープ内のオブジェクトへの参照であり、オブジェクト自体ではありません。

正に、「変数」は非常に柔軟性が高く、定義されていない用語です。フィールドは変数ですか?メソッドの戻り値は?それは、誰が話しているのか、そして彼らが今日使っている曖昧な定義に依存します。ここでB

+0

なぜリファレンスが変数であるとお考えですか?私はそれがどんなプリミティブと同じくらい価値があると言いたいと思います。独自の例を使用するには、参照型を返すメソッドが "変数"を返しますか?私はそうは思わない。 – shmosel

+0

私はoが変数であることを理解しました。また、ポインタ/参照でもあります。 –

+0

@shmosel: 'o'は変数です - おそらく' o'には参照が格納されていませんが 'o'自体です。私は、方法の復帰が従来の意味では「変数」ではないことに同意しますが、ここでもそのようなあいまいな用語を「可変」とみなすのはかなり役に立たないと私は考えています。 –

0

予約語newでコンストラクタを呼び出すと、オブジェクトが作成されます。例えば

Object a = new Object(); 

aは、作成した新しいオブジェクトの変数になると、そのオブジェクトのために予約されたメモリに移動します。その新しい変数をインスタンス化していて、その変数がそのオブジェクトに関連付けられています。

+0

しかし、データ値を含むメモリ部分へのポインタではありませんか?実際のメモリそのものではないのですか? –

+0

...私はあなたの最初の文やそれが何を求めているのか分かりません。言い直してください。 –

+0

だから、 "a"という名前のオブジェクトは変数ですよね?それはまた、それは参照ですか? –

-1
Hope might this will help you to understand it better... 

class Bulb 
    { 
    private int w; 
    public void setWattage(int e) 
    { 
    w=e; 
    } 
    public int getWattage() 
    { 
    return w; 
    } 
    } 
    class Test 
    { 
    public static void main(String args[]) 
    { 
    Bulb b[]; 
    b=new Bulb[2]; 
    b[0]=new Bulb(); 
    b[1]=new Bulb(); 
    b[0].setWattage(60); 
    b[1].setWattage(100); 
    System.out.println(b[0].getWattage()); 
    } 
    } 

[0]、B [1 2つのバルブのアドレスが

1

が可変と考え対象であるオブジェクトを持っている参照変数がありますか?

いいえ、これらは2つの異なるものです。
最初のオブジェクト(オブジェクト)は値であり、2番目のオブジェクト(変数)はオブジェクトを参照するための方法で、一般的にオブジェクトを使用します(例えば一連のメソッドを呼び出します)。たとえば
あなたが書いた:

new Dog() 

あなたはDogをインスタンス化します。ニース。しかし、空腹であれば餌を与えたいとします。
このオブジェクトに対して一連のメソッドを連結する方法がない場合は、できません。あなたがそれを行うことができdog変数にDogの参照を格納することにより

Dog dog = new Dog(); 
if (dog.isHungry()){ 
    dog.feed(); 
} 

Jenkovチュートリアルがあるとして、変数を引用し、「 は、データ値を含めることができ、メモリの作品。」

同じことを言います。

しかし、この:私は勉強しています

1つの供給源は、として配列を定義し、「変数はインデックス 番号によってアクセスされている1名の下に 変数のコレクション、。」

はかなり誤解を招く。
配列は、とりわけ配列の要素を含む状態を持つオブジェクトです。
要素が参照される方法は、Arrayクラスの実装の詳細です。各要素が特定の変数に格納されていることは保証しません。

+0

私は今、理解し始めていると思いますが、変数が「データ値を含むことができるメモリの一部」であれば、データ値は単純に参照/変数の名前ですか? –

+0

必ずしもそうではありません。変数は単に言い方です:私はオブジェクトを使用する方法があります。だから私はそれを「指す」変数を使います。そして、この変数を使ってオブジェクトを操作することができればいいです。 – davidxxx

関連する問題