2017-06-13 14 views
1
public class TestPass { 

int a,b; 
TestPass(int i,int j) 
{ 
    a=i; 
    b=j; 
} 
boolean equals(TestPass o) 
{ 
    if(o.a==a&&o.b==b) 
     return true; 
    else 
     return false; 
} 

}、短絡演算子

class Test 
    { 
    public static void main(String[] args) 
    { 
    TestPass ob1=new TestPass(100, 22); 
    TestPass ob2=new TestPass(100, 23); 


    System.out.println("Condition="+ob1.equals(ob2)); 
} 

}

出力:

条件=私はこの出力との論理を見つけることができません

偽、bcoz 'if(oa == a & & ob == b)'コードが使用されていますhort circuit operator(& &)、それはオペレータの左手側のみをチェックします(私はそう思います)。右側を左のみチェックを

 TestPass ob1=new TestPass(100, 22); 
     TestPass ob2=new TestPass(100, 23); 

は、ここで私は異なる値を与えたが、私は考え、短絡演算子(& &)、私の予想出力はTrueです!、私は、私はwrong.Iは説明が必要だと思うあなたを期待助けて。

+0

にsimplfiedすることができ、短絡演算子(&&)は、演算子の左辺のみをチェックする(私はそうだと思う) "< - 左手がfalseの場合のみ。参照:https://stackoverflow.com/questions/9344305/what-is-short-circuiting-and-how-is-it-used-when-programming-in-java –

+1

いいえ '&&'は左側をチェックし、それが「真」であれば、右手側もチェックする。一方または両方の辺が「偽」である場合、表現全体が「偽」となる。 – Berger

+0

*** Enrique_Iglesias ***あなたはスペインの歌手ですか? :) –

答えて

0

短絡は、左側がfalseの場合にのみ適用されます。左側が真であれば、右側を確認するために進みます。

あなたのケースでは、o.a==aが真であるため、右側を確認するように:o.b==bはfalseで、全体的にはfalseになります。

+0

私はそれを持っています。ありがとう –

0

これは、あなたが心に留めておく必要がある短絡に関するルールです。それについて考えての

╔══════════╦════════════════════════════════════════════════════════════════════════╗ 
║ Operator ║       short-circuit        ║ 
╠══════════╬════════════════════════════════════════════════════════════════════════╣ 
║ A && B ║ if A==false then the B expression is never evaluated     ║ 
║ A || B ║ if A==true then the B expression is never evaluated     ║ 
╚══════════╩════════════════════════════════════════════════════════════════════════╝ 
+0

それはありがとう! –

+0

what ???????????? –

0

一つの方法は、FYIかの条件

boolean equals2(TestPass o) { 
    if (o.a == a) { 
     if (o.b == b) { 
      return true; 
     } 
     return false; 
    } 
    return false; 
} 

あるいは

boolean equals3(TestPass o) { 
    if (o.a == a) { 
     return o.b == b; 
    } 
    return false; 
} 

を分割することで、あなたの等号は「return o.a==a&&o.b==b

関連する問題