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短路操作员(&&)只检查左手边,我的预期输出是真的!我想我错了。我需要澄清,期待你的帮助。
答案 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