Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,a和b是布尔值,a&&;食肆及食肆&;a对相同的结果进行评估?_Java_Boolean_Logical Operators - Fatal编程技术网

在Java中,a和b是布尔值,a&&;食肆及食肆&;a对相同的结果进行评估?

在Java中,a和b是布尔值,a&&;食肆及食肆&;a对相同的结果进行评估?,java,boolean,logical-operators,Java,Boolean,Logical Operators,所以我在去年的一次Comp-Sci期中考试中遇到了这个问题,我仍然不明白为什么a&&b和b&&a的评估结果不一样 在我看来,有4种可能的情况: A为真,B为真: True&&True为True A为真,B为假: True&&False为假,False&&True也为假 A为假,B为真: False&&True为假,True&&False为假 A为假,B为假: False&&False是False 然而,期中修正案和教授说a&b和b&a的评估结果并不总是一样的 编辑:我不认为这是“

所以我在去年的一次Comp-Sci期中考试中遇到了这个问题,我仍然不明白为什么a&&b和b&&a的评估结果不一样

在我看来,有4种可能的情况:

  • A为真,B为真:
    • True&&True为True
  • A为真,B为假:
    • True&&False为假,False&&True也为假
  • A为假,B为真:
    • False&&True为假,True&&False为假
  • A为假,B为假:
    • False&&False是False
  • 然而,期中修正案和教授说a&b和b&a的评估结果并不总是一样的


    编辑:我不认为这是“操作员短路”的重复。。。我绝对不会问关于第一部分的问题和操作。。。我问的是这两个部分,这是一个重复的“原始”问题没有回答我的问题。

    是的,你会得到相同的结果。但是,如果您有
    a和
    b,并且a为FALSE,那么Java不会计算b,并且会说结果为FALSE。

    取决于
    a和
    b
    将代表什么。可能
    a
    b
    可以修改其他表达式的状态。如果a和b是变量,那么当然a&&b和b&&a必须给出相同的结果。但如果这些实际上是方法调用,情况就不同了(因为有副作用)。。。“操作员短路”。。。第二,非常感谢GhostCat,我应该想到方法调用,但如果我错了,请纠正我,但这是否意味着,例如,如果一个调用方法a,而该方法修改了b的输出,而不是相反,那么a&&b和b&&a的计算结果就不一样了?@SilenT612想象两个变量
    a
    b
    ,都设置为
    false
    ,以及两个方法
    a1
    b1
    a1
    只返回
    a
    b1
    a
    b
    设置为
    true
    并返回
    b
    。实际上,
    a1和&b1
    现在将是
    false
    ,因为
    a1
    将返回
    a
    的当前状态,即
    false
    。但是
    b1&&a1
    会将
    a
    修改为
    true
    ,将
    b
    修改为
    true
    ,这将导致一个整体
    true
    语句。@SilenT612运算符短路与此相关,因为这是两个语句可能不相同的原因之一。使用a&&b时,表达式从左到右求值。如果a的计算结果为false,则不会计算b,因为javavm已经知道表达式为false。但是,如果a的计算结果为true,则b也将被计算。因此,a&&b有时被用作书写的简写:if(a){b;}。因此,很明显,当a和/或b不是简单的布尔常量或变量时,a和b的顺序实际上很重要。最终结果是一样的。@VaibhavBajaj不一定。这取决于a和b是如何构建的:如果((j+=1>2)和((i-1<3))与如果((i-1<3)和((j+=1)>2))