2

このような基本的な質問をして申し訳ありませんが、この出力がどのように生成されるのか理解できません.誰かが私のばかげた質問に答える時間があれば、それは非常に高く評価されます.

これがコードです

public class EchoTestDrive {
    public static void main(String[] args) {  
        Echo e1= new Echo();  
        Echo e2= new Echo(); 

        int x=0;  
        while(x < 4) {  
            e1.hello();  
            e1.count=e1.count +1;  

           if(x==3) {  
               e2.count=e2.count+1;  
           }  
           if(x>0) {  
               e2.count=e2.count+e1.count;  
           }
           x=x+1;  
        }

        System.outprintln(e2.count);  
    }
}  

class Echo {  
    int count =0;  
    void hello() {   
        System.outprintln("helloo...");   
    }  
}

これにより、次の出力が得られます。

helloo...

helloo...

helloo...

helloo...

10 

ここで、10 ではなく 24 を取得するために、Echo e2=e1 を宣言します。Echo の代わりに e2=new Echo; これがこの特定の出力をどのように生成するのか知りたいのですが、10の場合、文字通りそれぞれに値を入れてその答えを得ることができますが、それらを等しくするとどうなりますか(理解できません)。

4

2 に答える 2

11

を作成するe2 = e1と、e1も同じオブジェクトを指すようになります。

e1したがって、カウントは両方の2倍にインクリメントされ、インクリメントされe2ます。

そうするとEcho e2 = new Echo()Echo e1 = new Echo()e1とe2の両方が2つの異なるオブジェクトを指しているためcount、e1をインクリメントしてもに影響はありませんe2.count

編集:

同じことを説明するために写真を追加します。

ここに画像の説明を入力してください

于 2012-04-30T18:13:52.753 に答える
2

キーワード「new」を使用すると、新しいオブジェクトが作成されます。

たとえば、次のようにさまざまなオブジェクトを作成します

Echo e1= new Echo();
Echo e2 new Echo();

そして、両方のオブジェクトは互いに独立しています、

ただし、そうする場合

Echo e1= new Echo();
Echo e2= e1;

e1とe2はどちらも同じオブジェクトを参照しており、e2に対して行うすべての操作は、同じ新しいEcho()を指しているため、e1とその逆にも影響を及ぼします。

ただし、次の点を考慮してください。

Echo e1= new Echo();
Echo e2= e1;
e2 = new Echo();

これはe1を破壊しますか?答えはいいえだ。e2はe1の参照を停止し、代わりに新しいオブジェクトを参照します(したがってキーワード)。

たぶん、これはあなたの質問に直接答えることはありませんが、いくつかの点を明確にする必要があります。

于 2012-04-30T18:21:21.357 に答える