Java 布尔表达式



我在 Java 中注意到一些奇怪的事情,我不小心试图评估以下布尔表达式

if (something = null && false) // error
if (false && something = null) // no error

java编译器在意识到表达式无法实现时是否会停止表达式的求值?

在 Java 中,您无法在 null 和布尔类型之间进行转换。

布尔表达式是一个 Java 表达式,在计算时返回一个布尔值:true 或 false。

如您所见,布尔表达式用于条件语句,例如 ifwhileswitch

需要明确的是,您甚至不能像许多其他语言(如 C 语言(中通常发生的那样在整数和布尔类型之间进行转换。

false &&

null 没有给你任何错误的原因是 false &&&任何永远是 false,这样编译器就不会计算操作的第二个项,因为它已经知道答案 = false

在第一种情况下:null && false,编译器计算第一个不是布尔值的项,正如编译器对"&&"操作的预期一样。所以它会抛出一个错误。

无论如何,在布尔运算中使用变量之前,您应该始终检查变量。

编辑:是的,我在编辑问题之前回答了,是的,我的答案无论如何都是错误的,我刚刚检查(对不起(。如果其中一个操作数不是布尔值,它将始终抛出错误。

Java 检查 and (&&( 逻辑运算符的第一个操作数,如果为 false,则不会计算第二个操作数。以及对于或 (||(Java 检查第一个操作数是否为真,然后,它不会计算第二个操作数。

如果要计算两个操作数,则可以改用位运算 (&, |(

你必须

在if语句中使用booleannull不是boolean所以两个表达式都是错误的。

也许你尝试使用:

if (something == null && false) 
if (true && something == null)

在这种情况下,它们都是正确的。

最新更新