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

Why does this boolean compile in C++ and not in Java?

本文关键字:Java 编译 C++ 布尔值 为什么      更新时间:2023-10-16

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

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

感谢您的帮助。

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

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

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

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


1 Java 定义boolean类型上的!运算符。

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

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

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