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

Java 布尔检查 [重复]

诸腾
2023-03-14

我在Java 8上工作,有一个简单的问题我还没有解决。

我有3个方法来验证来自数据库的数据,并根据它们是否得到一行来返回真或假。棘手的是,即使我知道第一部分返回false,我仍然希望它检查其他两个方法。我已经编写了这样的代码:

boolean flag = true;

flag = flag && validateMethod1();
flag = flag && validateMethod2();
flag = flag && validateMethod3();

return flag;

问题是,当validateMETOD1()返回false时,它没有调用validateMETOD2()。有人能解释一下为什么吗?我试过了:

 boolean flag = true;

    flag = flag & validateMethod1();
    flag = flag & validateMethod2();
    flag = flag & validateMethod3();

    return flag;

仍然面临同样的问题。

共有3个答案

董良策
2023-03-14

这是因为您正在使用短路

桂志诚
2023-03-14

Java使用表达式的排序循环求值——也就是说,一旦它确定结果将是< code>false,它就停止求值。

由于您的表达式是一个连词,一旦发现标志为false,很明显整个表达式将为false。

解决它的一种方式(相当冗长)是:

boolean flag1 = validateMethod1();
boolean flag2 = validateMethod2();
boolean flag3 = validateMethod3();
return flag1 && flag2 && flag3;
华欣荣
2023-03-14

<代码>

为了计算所有操作数,请使用非短路版本的AND运算符:

return validateMethod1() & validateMethod2() & validateMethod3();

如您所见,您的逻辑可以简化为一行代码。

 类似资料:
  • 除了相等检查,Jasmine还提供了一些方法来检查布尔条件。 以下是帮助我们检查布尔条件的方法。 toBeTruthy() 此布尔匹配器在Jasmine中用于检查结果是等于true还是false。 以下示例将帮助我们理解toBeTruthy()函数的工作原理。 ExpectSpec.js describe("Different Methods of Expect Block",function (

  • 问题内容: 如何检查布尔值是否为null?因此,如果我知道“ hideInNav”为空。如何阻止它进一步执行?像下面这样的东西似乎不起作用,但是为什么呢? 问题答案: 只能是或因为它是原始数据类型(+ 变量的默认值为)。如果要使用值,则可以改用类。布尔是一种引用类型,这就是您可以分配给布尔“变量”的原因。例:

  • 问题内容: 我有一个mongo文档,其中包含一个日期字段,该日期字段也可以为false(或未定义),并且似乎无法找到如何检查该字段是否可用或为false或是否为日期(time.Time)的日期golang / mgo:S 问题答案: 如果您有一个字段,并且想知道它是否正确地设置了有效日期,则可以查询其方法。否则,如果您要在数据库中查询此类文档,则可以执行以下操作之一。 查询该字段是否为假: 使用$

  • 当我想检查可选布尔值是否为真时,这样做行不通: 它会导致以下错误: 可选类型“@IvalueBool?”不能用作布尔值;测试'!=而不是零 我不想检查nil;我想检查返回的值是否为真。 如果布尔值==true,我是否总是必须执行

  • 我正在使用Spring Framework。在编写自定义查询时,我无法检查布尔值的参数。例如,这不起作用: 上述检查不起作用,当布尔变量(booleanVariable)为true和false时,这两种情况下的计算结果相等。 我试图替换和"false"。 是否可以像上面那样检查XML中的布尔属性?

  • 问题内容: 因此,我听说如果将2个字符串与==进行比较,则只有它们都引用相同的对象/实例时,我才会返回true。那是琴弦。布尔呢? 问题答案: ==是否检查布尔值是否完全相等?-Java 这取决于您是在谈论s(对象包装,请注意大写)还是s(原始,请注意小写)。如果您在谈论s(对象包装器),就像处理所有对象一样,请检查 身份 ,而不是对 等 。如果您在谈论s(基元),它将检查是否相等。 所以: 但