当前位置: 首页 > 知识库问答 >
问题:

以及在Java中使用对象作为参数的短路运算符

公良文彬
2023-03-14
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(o.a==a

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

这里我给出了不同的值,但我认为是短路运算符(

共有3个答案

孟高峰
2023-03-14

考虑这个问题的一种方法是分割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;
}

仅供参考,你的等式可以简化为返回o.a==a

柴禄
2023-03-14

这是关于短路的规则,你需要记住。

╔══════════╦════════════════════════════════════════════════════════════════════════╗
║ 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                    ║
╚══════════╩════════════════════════════════════════════════════════════════════════╝
法弘亮
2023-03-14

短路仅在左侧为假时适用。如果左侧为真,它将继续检查右侧。

在你的例子中,o.a==a是真的,所以它会检查右边:o.b==b是假的,使其整体为假。

 类似资料:
  • 给出静态编程语言中的编译错误(意外标记(使用';'分隔同一行上的表达式))

  • 问题内容: 哪一组短路,这到底意味着复杂的条件表达式短路了? 问题答案: 在与运营商“短路”,这意味着如果没有必要,他们不评价的右手边。 在与运营商,如逻辑运算符时,始终评估两侧。 每个操作员只有一种短路情况,它们是: -不必知道右侧是什么,结果必须是 -不必知道右侧是什么,结果必须是 让我们在一个简单的示例中比较行为: 第二个版本使用非短路运算符,并将抛出,但第一个版本将无例外地返回;

  • 在xsl样式表中调用该对象的实例方法,如下所示: 我的问题是:这样做是否恰当?哪种XSLT处理器适合以这种方式使用参数?还有别的办法吗? 我试用了Xalan(org.apache.Xalan.xsltc.trax.TransformerFactoryImpl),但遇到一个异常,即找不到该方法: 该方法是公共的,没有参数。

  • Swagger提出了一个类似的问题:重用枚举定义作为查询参数。我的问题是我是否可以使用枚举(可重用或不可重用)。每当我尝试这样做的时候,我都会得到错误,但是使用字符串不会给出任何错误 我的问题是上面的例子是否有效,或者我应该尝试什么可能的改变。我使用的是OpenAPI 3.0.0。 错误: 我对XX.client知之甚少.cpp .它是一个自动生成的文件,是在编译yaml文件后构建的。

  • 问题内容: 我正在阅读Kathy Sierra和Bert Bates编写的SCJP Java 6,这本书让我非常困惑。在第245页上,他们声明以下代码。 然后在下一页上,它们具有以下代码 我很困惑!当我自己尝试该方法时,似乎无法使用==来比较使用equals()方法的方式。即使Integer变量设置为相同的值(即10),使用==总是给我’false’。我对么?使用==比较相同的Integer对象(

  • 问题内容: 我在开发过程中注意到了这一点。 为什么三元运算符不能在方法参数中使用?这显然是或(其他)。 问题答案: 表达式的类型为,因为这是()和()的常见类型。 您没有任何接受的方法。因此,编译错误。