【问题标题】:Why does this boolean compile in C++ and not in Java?为什么这个布尔值在 C++ 中编译而不是在 Java 中?
【发布时间】:2013-10-23 05:08:41
【问题描述】:

在 C++ 中,此表达式将编译,并在运行时打印 test:

    if(!1 >= 0) cout<<"test";

但在 Java 中,这不会编译:

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

而需要括号:

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

test 不会打印,因为1 &gt;= 0 为真,NOT 为假。

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

感谢您的帮助。

【问题讨论】:

    标签: java c++


    【解决方案1】:

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

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

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

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


    1Java 定义! 运算符而不是boolean 类型。

    【讨论】:

      【解决方案2】:

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

      Here是Java运算符优先级明细表。

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

      【讨论】:

      • 在 C++ 中,! 运算符的优先级也高于 &gt;=
      • 不仅正值是真的,负值也是如此。唯一的非真值是 0。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-23
      • 1970-01-01
      • 2018-12-03
      相关资源
      最近更新 更多