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真是假的。

那么为什么它test在 C++ 中编译并打印出来,即使该语句是错误的,但在 Java 中却不是?

谢谢你的帮助。

4

2 回答 2

22

这是因为!1在 C++ 中有效,但在 Java 1中无效。

两种语言都解析!1>=0(!1)>=0因为(在 C+ 和 Java 中)!的优先级高于>=.

所以(在 ​​C++ 中),(!1)>=0-> 0>=0->true但是(在 Java 中)!1( !int) 是类型错误。

但是(在 C++ 或 Java 中),!(1>=0)-> !(true)-> false


1 Java定义了类型!之上的操作符boolean

于 2013-10-23T05:13:31.277 回答
6

在java中,一元运算符!的优先级高于条件运算符>=。这就是为什么它需要括号 ()

是Java的运算符优先级的详细信息表。

但是,在 C++ 中,条件中的正值称为boolean true值。因此,if(!1>=0)在 C++ 中有效,但在 Java 中无效。在 Java 中,boolean值只有truefalse。它从不将正值视为真实。

于 2013-10-23T05:12:13.113 回答