在Java中,a和b是布尔值,a&&;食肆及食肆&;a对相同的结果进行评估?
所以我在去年的一次Comp-Sci期中考试中遇到了这个问题,我仍然不明白为什么a&&b和b&&a的评估结果不一样 在我看来,有4种可能的情况:在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的评估结果并不总是一样的 编辑:我不认为这是“
- True&&True为True
- True&&False为假,False&&True也为假
- False&&True为假,True&&False为假
- False&&False是False
编辑:我不认为这是“操作员短路”的重复。。。我绝对不会问关于第一部分的问题和操作。。。我问的是这两个部分,这是一个重复的“原始”问题没有回答我的问题。是的,你会得到相同的结果。但是,如果您有
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))