Java的基本类型

1 Java 基本类型

        Java作为面向对象语言,实际上海引入了八个基本类型,来支持数值计算。这么做的原因主要是工程上的考虑,因为使用基本类型能够在执行效率以及内存使用两方面提升软件性能。

2 Java boolean类型

        Java语言规范中,boolean类型的值只有两种可能,分别用符号“true”和“false”表示。显然,这两个符号是不能被虚拟机直接使用的。
        在Java虚拟机规范中,boolean类型则被映射成int类型。true映射成整数 1;false被映射成整数 0。

3 Java 八个基本类型

                          

        尽管他们的默认值看起来不一样,但在内存中都是 0。
        通常我们认定char类型的值为非负数。这种特性十分有用,比如作为数组索引等。Java的浮点类型采用IEEE 754浮点数格式。以float为例,浮点类型通常有两个 0 ,+0.0F和 -0.0F。前者在java里是 0,后者是符号位为1、其他位均为0的浮点数,在内存中等同于十六进制整数0x8000000(即-0.0F可通过Float.intBitsToFloat(0x8000000)求得)。尽管它们的内存数值不同,但在Java中+0.0F == -0.0F会返回真。
        正无穷就是任意正浮点数(不包括+0.0F)除以+0.0F得到的值,而负无穷是任意正浮点数除以-0.0F得到的值。在Java中正无穷和负无穷是有确切的值,在内存中分别等同于十六进制整数 0x7F800000 和 0xFF800000。
        那0x7F800001又对应什么浮点数呢?这个数字对应的浮点数是NaN(Not a Number)。不仅如此[0x7F800001,0x7FFFFFFF]和 [0xFF800001,0xFFFFFFFF]对应的都是NaN。一般我们计算得出的NaN,在内存中的值为0x7FC00000。这个数值称为标准的NaN,其他的称为不标准的NaN。
        NaN有个有趣的特性:除了!=始终返回true之外,所有其他比较结果都返回false。

4 Java 基本类型的大小

        Java虚拟机每调用一个Java方法,就会创建一个栈帧。这个栈帧有两个主要组成部分,分别是局部变量区,以及字节码的操作数栈。这里局部变量是广义的,除了普遍意义下的局部变量之外,它还包含实例方法的“this指针”以及方法所接收的参数。在Java虚拟机规范中,局部变量区等价于一个数组,并且可以用正整数来索引。除了long、double值需要用两个数组单元来存储之外,其他基本类型以及引用类型的值均占用一个数组单元。