在Java内部原始布尔值被视为-1?

And*_*hez 1 java programming-languages

在论坛的另一天,我对原始的布尔数据类型进行了讨论.有一个人说,ALL语言true内部(或本地)被视为-1.这是真的吗?

PD:我们特别谈论Java

Jon*_*eet 11

这实际上是JVM规范的一部分,至少在某些方面 - 并且它不是 -1.规范的第3.3.4节有这样的说法:

虽然Java虚拟机定义了一个布尔类型,但它只提供非常有限的支持.没有专门针对布尔值操作的Java虚拟机指令.相反,Java编程语言中对布尔值进行操作的表达式被编译为使用Java虚拟机int数据类型的值.

Java虚拟机直接支持布尔数组.它的newarray指令可以创建布尔数组.使用字节数组指令baload和bastore.2访问和修改boolean类型的数组

Java虚拟机使用1表示布尔数组组件以表示true,使用0表示false.其中Java编程语言布尔值由编译器映射到Java虚拟机类型int的值,编译器必须使用相同的编码.

作为一个例子:

public static boolean returnFalse() {
    return false;
}

public static boolean returnTrue() {
    return true;
}
Run Code Online (Sandbox Code Playgroud)

编译为:

public static boolean returnFalse();
  Code:
     0: iconst_0
     1: ireturn

public static boolean returnTrue();
  Code:
     0: iconst_1
     1: ireturn
Run Code Online (Sandbox Code Playgroud)