JVM基本原理: Java的基本类型
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的掩码处理是取低位的最后一位