2017-02-21 1 views
-2
class Test { 

int a, b; 

Test (int i,int j) 
{ 
    a=i; 
    b=j; 
    System.out.println("a is " + a); 
} 
boolean equalto(Test o) 
{ 

if (o.a == a && o.b == b) 
    return true; 
else return false; 

} 
    } 

class PassObj { 

public static void main(String[] args) { 

    Test ob2 = new Test(100,22); 
    Test ob3 = new Test(-1 ,-1); 
    Test ob1 = new Test(100 ,22) ; 

System.out.println(ob1.equalto(ob2)); 
System.out.println(ob1.equalto(ob3)); 



} 
    } 

上記のコードでは、条件が機能しているかどうかを知ることができます。 if文の最初のprint文についてob2.aを "a"、つまり100 == aと比較した場合オブジェクトをJavaのパラメータとして使用する

疑問があるのは、比較するために取っている "a"の値です。 printステートメントが実行される前にその "a"値を印刷しようとしましたが、オブジェクトが作成されて開始されたときに "a"の3つの値が100、-1、100として印刷されることがわかりました。

ob1。 equalto(ob2)はコンストラクタを再度呼び出しますか?もしそうなら、私の出力では、 "a"が再び印刷されるべきではありません。私はOOPの新人であり、このコンセプトでは明確ではありません。

私の疑問は、「」それはprint文1および2のために比較されたとき、それが取るとどのように私はそれらの2だけ印刷することができ、私は今取得しています「」

出力されます:

a is 100 
a is -1 
a is 100 
true 
false 
+0

オブジェクトの "a"は、オブジェクトをインスタンス化したときにコンストラクタに渡されたint値への参照です。もう一方のオブジェクトのaは、2番目のオブジェクトをインスタンス化するときにコンストラクタに渡されるintへの参照です。 ob1.equalto(ob2)はコンストラクタを再度呼び出さない。そのコンストラクタを使用するだけでそれが呼び出されます。 –

+1

現在のオブジェクトのaと、渡されたオブジェクトoのaを比較しています。 ob1.equalto(ob2)は、ob1とob2がすでに存在し、初期化されているため、コンストラクタを呼び出しません。オブジェクトを初期化すると、単に消えることはありません。 –

+0

OOPについてのより明確な例を知りたい場合は、属性名を持つStackOverflowAccountというクラスについてお話ししましょう。名前はCHIVIDのアカウントを作成し、Jeremy Grandという名前で別のインスタンスを取得しました。私たちの2つの口座間でequaltoを呼び出すと、あなたの口座名(CHIVID)が私の口座(Jeremy Grand)と同じであることを確認します。 –

答えて

1

私は本当にあなたが求めている、具体的かわからないが、私はいくつかのOOPの概念を説明しようとするとうまくいけばよあなたはそれを手に入れます。コードが実行される

Test ob2 = new Test(100,22); 
Test ob3 = new Test(-1 ,-1); 
Test ob1 = new Test(100 ,22); 

後、コンストラクタは3回呼び出されます。

ここでは、3つのオブジェクトを作成しました。したがって、3つのオブジェクトが作成されます。 ob1ob2ob3は、あなたがそれらを与えるラベルのようなものなので、どちらが後であるかを識別することができます。これらの3つのオブジェクトは完全に独立していることに注意してください。ここのすべてのオブジェクトにはabが格納されています。

今、この行:ここ

System.out.println(ob1.equalto(ob2)); 

あなたがob2の引数でob1equaltoを呼び出します。メソッド内で何が起こるかを見てみましょう。私はこの部分があなたが最も混乱している場所だと思います。

if (o.a == a && o.b == b) 
    return true; 
else return false; 

} 

あなたは、パラメータとしてob2を渡されたので、oここでは基本的にob2を意味します。しかし==の右側にあるaは何ですか?このaは、実際にはthis.aの略です。 thisは、メソッドが呼び出されたオブジェクトを表します。この場合は、ob1です。詳細情報が必要な場合はthisをチェックしてください。

ここではob1.aob2.aを比較しています。同じことが次の行で起こります。

+0

@ sweeper-メソッド内のインスタンス変数は、メソッドが呼び出されたオブジェクトの値を持ちます。この場合、aとb。 "これは実際にはthis.a"の略です。同じことがすべてのオブジェクトパラメータ渡しシナリオに当てはまりますか? – CHIVID

+0

@CHIVIDはいそうです – Sweeper

0

Construtorは、その時点でオブジェクトが作成され、Contructorが呼び出されたときにTest ob2 = new Test(100,22);と書いたときのように、オブジェクトを作成するときに呼び出されます。

あなたは次のようにequaltoメソッド内で印刷する必要があなたの条件によると:

boolean equalto(Test o) 
{ 

    //if you use System.out.println(ob1.equalto(ob2)); then this.a will print ob1 'a' value 
    //and o.a will print ob2 'a' value 
    System.out.println(this.a+" "+o.a); //this.a 
    if (o.a == a && o.b == b) 
     return true; 
    else 
    return false; 
} 
関連する問題