JVM基本原理: Java的基本类型

117 阅读2分钟

JVM基本原理: Java的基本类型

bae11fc6-5dae-49ea-adb0-cfef9fbfc61e.png

JVM的boolean类型

Java引进8个基本类型:在执行效率和内存两方面提升

public class Foo {
​
    public static void main(String[] args) {
        boolean 吃过饭没 = 2; // 直接编译的话 javac 会报错
        if (吃过饭没) System.out.println(" 吃了 ");
        if (true == 吃过饭没) System.out.println(" 真吃了 ");
    }
}

JVM中boolean被映射为int类型,存储boolean数组字节码,JVM需保证实际存入的值是1或0

尽管默认值看起来不一样,但在内存中都是0

char类型时非负数

2可以存储到boolean,其他的类型能否超过他们的范围?

可以,但是会有麻烦,char可能为负数

Java浮点类型采用IEEE 754浮点数格式,+0.0F,-0.0F内存数值不同,但Java中+0.0F==-0.0F会返回真

在有了 +0.0F 和 -0.0F 这两个定义后,我们便可以定义浮点数中的正无穷及负无穷。正无

穷就是任意正浮点数(不包括 +0.0F)除以 +0.0F 得到的值,而负无穷是任意正浮点数除以 -0.0F 得到的值。在 Java 中,正无穷和负无穷是有确切的值,在内存中分别等同于十六进制整数 0x7F800000 和 0xFF800000

既然整数 0x7F800000 等同于正无穷,那么 0x7F800001 又对应什么浮点数呢?

这个数字对应的浮点数是 NaN(Not-a-Number)

不仅如此,[0x7F800001, 0x7FFFFFFF] 和 [0xFF800001, 0xFFFFFFFF] 对应的都是 NaN。

当然,一般我们计算得出的 NaN,比如说通过 +0.0F/+0.0F,在内存中应为

0x7FC00000。这个数值,我们称之为标准的 NaN,而其他的我们称之为不标准的 NaN。

NaN 有一个有趣的特性:除了“!=”始终返回 true 之外,所有其他比较结果都会返回false。

NaN<1.0F //false
NaN>=1.0F//false
NaN!=f//true

课后作业

public class Foo {
 public static void main(String[] args) {
  boolean flag = true;
  if (flag) System.out.println("Hello, Java!");
  if (flag == true) System.out.println("Hello, JVM!");
 }
}

当替换为2的时候无输出

当替换为3的时候打印HelloJava及HelloJVM

猜测是因为将boolean 保存在静态域中,指定了其类型为'Z',当修改为2时取低位最后一位为

0,当修改为3时取低位最后一位为1

则说明boolean的掩码处理是取低位的最后一位