![Java无难事:详解Java编程核心思想与技术(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/851/47548851/b_47548851.jpg)
2.2 数据类型
Java的数据类型分为基本数据类型和引用数据类型,如图2-1所示。
基本数据类型分为四类(共8种):
● 布尔型——boolean
● 字符型——char
● 整数类型——byte、short、int、long
● 浮点数型——float、double
引用数据类型包括类、接口、数组和枚举。
本节我们介绍Java中的8种基本数据类型和常用的String类型。
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_40_1.jpg?sign=1739011348-JIh3GidqBiok8QtF7NMbsRhC3LcUzEOx-0-35181de000f0e52950f8be629f8ba5b3)
图2-1 Java的数据类型
2.2.1 整数类型
Java各整数类型有固定的表数范围和字节长度,而不受具体操作系统的影响,以保证Java程序的可移植性,如表2-1所示。
表2-1 Java的整数类型
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_40_2.jpg?sign=1739011348-iSYwuaL1E8CTQumXBYeAAoO5DgG6QCvX-0-a8e6eefc73df83a9958ff7bd3283c671)
1.byte类型
byte类型是一个有符号的8位二进制数(也就是1个字节),它的表数范围是:-128~127。下面声明了一个byte类型的变量:
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_40_3.jpg?sign=1739011348-DQMBdQ6Wm9OTptC0PGnOKitVpHFXiHkn-0-c2edaca59f6ee8ce082a0180c00c09b7)
需要注意的是,byte类型是一个有符号的1个字节的整数,如果你给byteVal赋值-129或者128,这就超过了byte类型的表数范围,编译器会报告错误“不兼容的类型:从int转换到byte可能会有损失”。
2.short类型
short类型是一个有符号的16位二进制数(也就是2个字节),它的表数范围是:-215~215-1。下面声明了一个short类型的变量:
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_40_4.jpg?sign=1739011348-eGgLjkkiPKCM61hDjcAEaum185TfgvbI-0-3425ab9a3d9a79d835bf4ca38ac6e1af)
3.int类型
int类型是一个有符号的32位二进制数(也就是4个字节),它的表数范围是:-231~231-1。下面声明了一个int类型的变量:
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_41_1.jpg?sign=1739011348-vXWvTnB42Ax5YiEF9jqyOakTLkv8bTRj-0-9be5212ffb1af061948e5059a62a681b)
4.long类型
long类型是一个有符号的64位二进制数(也就是8个字节),它的表数范围是:-263~263-1。下面声明了一个long类型的变量:
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_41_2.jpg?sign=1739011348-uS103mA4kvjlysiCEKeDEXNCbNaHM5xG-0-f6270cd79278ecd3be4900d7699f6fe2)
2.2.2 浮点类型
Java浮点类型遵循IEEE 754标准,关于该标准,感兴趣的读者可以自行查阅相关资料。不过有一点需要读者注意:浮点数的存储方式与整数是不同的。Java浮点类型有固定的表数范围和字节长度,如表2-2所示。
表2-2 Java的浮点类型
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_41_3.jpg?sign=1739011348-sNkZvpMizQoIFSY3am0uLI2Qxx1pPaIN-0-394b2fd751f4e018ec7a583275478846)
1.float类型
float类型是单精度浮点类型,它占用4个字节的存储空间。
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_41_4.jpg?sign=1739011348-RLyeMJsdpGFCYdrh0wcPuragSB67ej7y-0-b816d2e3cb9899693605b3c833edafa4)
上面的代码声明了一个float类型的变量,并赋值为3.14。读者会发现3.14后面有个字母“f”,这个“f”标识前面的数字是float类型的浮点数。如果我们把f去掉会是什么结果呢?编译器会报告错误:“不兼容的类型:从double转换到float可能会有损失”。
在Java源程序中,当我们直接书写一个小数(如1.5)时,Java编译器默认这个数值是一个double类型的浮点数。因此,我们在为一个float类型的变量赋值时,需要在数字后面添加字母“f”或者“F”。
2.double类型
double类型是双精度浮点类型,它占用8个字节的空间,精度比float类型要高。
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_41_5.jpg?sign=1739011348-2qZJR6sGt6s0cUs1Imyu5FSHuSBmH0RT-0-4ecbc0088f172416f1e07be5da47d813)
上面的代码声明了一个double类型的变量,并赋值为3.14。在给double类型的变量赋值时,书写的小数就不需要添加任何后缀了。
2.2.3 字符(char)型
char类型数据用来表示通常意义上的“字符”。在Java中,char类型比较特殊,它本质上是一个无符号的16位二进制数(2个字节)。Java为了让char类型能够存储多种语言的字符,采用了Unicode来对字符进行编码,而Unicode是采用双字节无符号数对字符进行编码的字符集,所以在Java中,char类型占用2个字节。
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_42_1.jpg?sign=1739011348-nS0hrxBUydAdbxgLiokJ4IqSldayBn2P-0-35a2c96f81a5f265271b1cdf96ddd45c)
上面的代码声明了一个char类型的变量chVal,并赋予了一个字符“a”。当我们给一个char类型的变量赋值时,一定要注意使用单引号将字符括起来,你也可以赋值一个大于0小于65535的值(Unicode编码)。
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_42_2.jpg?sign=1739011348-77HDopGIr9loLPSqcINBHzCMKDsznHRk-0-390fda111dcf721959ba8cb3528e573f)
若我们无意间使用了双引号,在编译时编译器就会报告错误:“不兼容的类型:String无法转换为char”。从这个错误提示中我们可以知道,用双引号括起来的字符“a”是一个字符串类型(String),而chVal变量是char类型,所以出现了类型不匹配的错误。
2.2.4 布尔(boolean)型
boolean类型适用于逻辑运算,一般用于程序流程控制。它只有两个值:true和false,不可以用0或非0的整数来替代false和true。熟悉C++的读者一看到boolean,就会想到C++中的bool类型,不过Java的boolean类型要特殊一些,它只接收true和false,在C++中,我们可能习惯于声明一个bool类型的变量,并给它赋0或1这种数值,但是这种方式在Java中是不允许的。
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_42_3.jpg?sign=1739011348-29JPJVh50EfgOBFH3zKs4F8Ny5eCyRXY-0-203ab7c0b21419d31f143f5b5b20f467)
我们可以把boolean类型的变量想象成开关,它无非就是开或者关两个状态。在声明boolean类型的变量时,熟悉C++的读者可能会把boolean关键字写成bool,这种笔误需要读者小心。
2.2.5 String类型
String类型并不属于上面介绍的8种基本类型,不过String类型在Java中是一个很常用的类型,表示字符串类型。确切地说,String是一个类,它封装了一些关于字符串的操作。
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_42_4.jpg?sign=1739011348-y48LIGU9eupZ05CJ9vGC5fNvwBo5S5gX-0-f37b1a05fb8b57e5e451a0f250cab9f5)
上面两行代码声明了一个String类型的变量,并给变量赋值为“Hello World!”。注意,在声明字符串变量时,要注意“String”的大小写,不要把“String”写成“string”了,而且在给字符串赋值时要使用双引号包裹住字符串。
给字符串变量赋值还有一些其它的方法:
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_42_5.jpg?sign=1739011348-nlUsui3CL9vlbBZdb5niFmjFHr7UHJYG-0-470e6e1d5dbf53dc0c6bb1df825e83a6)