在Java中使用Object作为参数的AND短路算子

时间:2017-06-13 09:57:45

标签: java

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'如果(oa == a&& ob == b)'代码用于和短路操作符(&&),它只检查左侧的运营商(我想是这样)。

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

这里我给出了不同的值,但我认为AND短路操作员(&&)只检查左手边,我的预期输出是真的!我想我错了。我需要澄清,期待你的帮助。

3 个答案:

答案 0 :(得分:0)

短路仅适用于左侧的情况。如果左侧是真的,它将继续检查右侧。

在你的情况下,o.a==a为真,所以检查右侧:o.b==b为假,整体上都是假的。

答案 1 :(得分: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                    ║
╚══════════╩════════════════════════════════════════════════════════════════════════╝

答案 2 :(得分:0)

考虑它的一种方法是拆分if条件

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