![实战Java虚拟机:JVM故障诊断与性能优化(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/901/47378901/b_47378901.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.3.3 数据类型的定义
Java语言规范中还定义了Java的数据类型。根据Java 1.7的规范,Java的数据类型分为原始数据类型和引用数据类型。原始数据类型又分为数字型和布尔型。数字型又有byte、short、int、long、char、float、double。注意,在这里char被定义为整数型,并且在规范中明确定义:byte、short、int、long分别是8位、16位、32位、64位有符号整数,而char为16位无符号整数,表示UTF-16的字符。布尔型只有两种取值:true和false。而对于float和double,规范中规定,它们是满足IEEE 754的32位浮点数和64位浮点数。
注意:在Java语言中,char占2字节,而不是C语言中的1字节。从这点上看,Java的国际化在语言底层就提供了强有力的支持。
此外,规范还定义了各类数字的取值范围、初始值,以及能够支持的各种操作。以整数为例,比较运算、数值运算、位运算、自增自减运算等都在规范中有描述。
除了基本数据类型,引用数据类型也是Java重要的组成部分,引用数据类型分为3种:类或接口、泛型类型和数组类型。
提醒:引用类型和原始类型在Java的处理中是截然不同的,尤其对于它们的“相等”操作。
【示例1-1】在Java语言规范中,有一个简短的示例,说明了引用类型和原始类型的区别:
![](https://epubservercos.yuewen.com/8F60EA/26763631609316106/epubprivate/OEBPS/Images/26_1.jpg?sign=1738830566-nTBhbgI9ocG5QepQeWuxHiFj8vJGOj1b-0-e39c71a4e6af9122244a1f44d9f14bbd)
![](https://epubservercos.yuewen.com/8F60EA/26763631609316106/epubprivate/OEBPS/Images/27_1.jpg?sign=1738830566-WBqL00NtLjUOcfFqLxBO7NdMwqA2rJeQ-0-f7e729b5a79c4a67c3b8c24b0964bff2)
上述程序将输出:
![](https://epubservercos.yuewen.com/8F60EA/26763631609316106/epubprivate/OEBPS/Images/27_2.jpg?sign=1738830566-T4ak8bm6mtkWhI6nragnimRBenFpQhLA-0-6d17032163baf75405fad4a9851fdb6a)
从上述输出可以看出,对于原始数据类型int,i1和i2表示不同的变量,两者毫无关系,但是对于v1和v2,它们都指向唯一一个由new关键字创建的Value对象。
由于本书并非讲解Java语言,因此对于这部分内容点到即止,有兴趣的读者可以参考Java语言规范的第4章“Types,Values,and Variables”。