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

时间:2011-11-23 20:54:34

标签: java programming-languages

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

PD:我们特别谈论Java

7 个答案:

答案 0 :(得分:11)

这实际上是JVM规范的一部分,至少在某些方面 - 并且不是 -1。该规范的Section 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;
}

汇编为:

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

public static boolean returnTrue();
  Code:
     0: iconst_1
     1: ireturn

答案 1 :(得分:3)

不,这不是真的。在C中,任何非零值都将在布尔上下文中解释为true,但==&&之类的操作将返回1表示true。在Python中,True与任何整数都不同,但True == 1返回True;在旧版本中,使用了1。我认为-1在BASIC家族中是传统的;肯定是在QBasic和pre-.Net Visual Basic中的情况。

在Java中,true并未“被视为”-1 ...布尔值和整数是无法比较的单独类型。内部表示取决于实现。

答案 2 :(得分:0)

我不知道ALL种语言,但是java boolean与数值不同。

答案 3 :(得分:0)

这取决于JVM的实现。

答案 4 :(得分:0)

布尔值的低级内部表示是一个特定于平台的问题。但是,由于Java通常(总是?)使用C / C ++实现,因此布尔值很可能与在C / C ++中处理布尔值的方式相同。即,0定义为FALSE,其他任何定义为TRUE

答案 5 :(得分:0)

-1可以是两个补码值-1的结果,即所有位都设置。实际占用的内存是JVM依赖的,可以是从一个位到32位整数的任何内容。据我所知,大多数JVM都将boole模型设为int。

答案 6 :(得分:0)

实际上,我所知道的唯一使用-1为真的语言是Visual Basic人员的VARIANT_BOOL。而且他们只是因为语言的限制而做到了这一点(只有按位逻辑操作并没有成为我下注的好主意。)