我在Java中注意到了一些奇怪的东西,我意外地试图评估以下布尔表达式
if (something = null && false) // error
if (false && something = null) // no error
当java编译器意识到表达式无法实现时,是否会停止对表达式的求值?
答案 0 :(得分:1)
在Java中,您无法在null
和布尔类型之间进行转换。
布尔表达式是一种Java表达式,在计算时,返回一个布尔值:true或false。
如您所见,布尔表达式用于条件语句,例如if
,while
和switch
。
要明确的是,你甚至无法在整数和布尔类型之间进行转换,就像许多其他语言一样。
答案 1 :(得分:1)
false&& null 不会给你任何错误,因为 false&&什么永远是假的,这样编译器就不会评估操作的第二个术语,因为它已经知道答案= false。
在第一种情况下: null&& false ,编译器评估第一个不是布尔值的术语,正如编译器对'&&'所期望的那样。操作。所以它会引发错误。
无论如何,在布尔操作中使用变量之前,应始终检查变量。
编辑:是的,我在问题编辑之前回答了,是的,我的回答是错的,我刚检查过(对不起)。 如果其中一个操作数不是布尔值,它将始终抛出错误。
答案 2 :(得分:0)
Java检查和(&&&)逻辑运算符的第一个操作数,如果为false,则不会计算第二个操作数。除了(||)Java检查第一个操作数是否为真之外,它还不会计算第二个操作数。
如果要对两个操作数进行求值,则可以使用位操作(&,|)
答案 3 :(得分:0)
您必须在if语句中使用boolean
且null
不是boolean
,因此两个表达式都是错误的。
也许您尝试使用:
if (something == null && false)
if (true && something == null)
在这种情况下,两者都是正确的。