为什么这个布尔值在C++中编译而在Java中却不能?

11
在 C++ 中,这个表达式将编译通过,并且当它运行时,将打印出 test
    if(!1 >= 0) cout<<"test";

但在Java中,这段代码将无法编译:

    if(!1 >= 0) System.out.println("test");

需要使用括号,而不是圆括号:

    if(!(1>=0)) System.out.println("test");

但是test不会被打印出来,因为1>=0是真的,而NOT true是假的。

那么为什么在C ++中即使语句是假的也编译并打印出test,但在Java中却不打印呢?

谢谢您的帮助。

2个回答

22
这是因为在C ++中!1是有效的,但在Java中不是1
两种语言都将!1>=0解析为(!1)>=0,因为(在C++和Java中)!的优先级高于>=
因此(在C ++中),(!1)>=0-> 0>=0 -> true,但(在Java中),!1!int)是类型错误。
但是(在C++或Java中),!(1>=0) -> !(true) -> false
1Java仅定义了!运算符对boolean类型的操作。

6
在Java中,一元运算符!的优先级高于条件运算符>=。因此,它需要括号()这里是Java运算符优先级的详细表格。
但是,在C++中,条件中的正值被视为boolean true值。因此,在C++中if(!1>=0)是有效的,但在Java中无效。在Java中,boolean值只有truefalse。它从来不会将正值视为true。

6
在C++中,"!"运算符的优先级也比">="高。 - qwertyuiop5040
3
不仅正数是真的,负数也是真的。唯一不是真的值是0。 - Benjamin Lindley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接