![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=1739008246-Xirpfux66RAH5PpAdJIY4wxELb7dOPpF-0-28bc7d70923f52830e7c6eefcdc1607d)
图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=1739008246-jpDDb4WnY3LDQnfISekSzXxW5Xpmjd7x-0-07094938b5b2e5857acc908a1b58d92c)
1.byte类型
byte类型是一个有符号的8位二进制数(也就是1个字节),它的表数范围是:-128~127。下面声明了一个byte类型的变量:
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_40_3.jpg?sign=1739008246-bHREV0vDGU2TKIQBMGASQtsZiAjhoVz3-0-5f0da4113b6fb402a9634b71571ce477)
需要注意的是,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=1739008246-dEqqjZKeJeYKWqiIiAPENiqb8JQmedOP-0-7363167054a6d615d0bd2cf2b6429603)
3.int类型
int类型是一个有符号的32位二进制数(也就是4个字节),它的表数范围是:-231~231-1。下面声明了一个int类型的变量:
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_41_1.jpg?sign=1739008246-plGEVLCPsqp1pm24gmeZeAgwm1zxxXxj-0-7530a165895a4b5fffbb46d3a91de502)
4.long类型
long类型是一个有符号的64位二进制数(也就是8个字节),它的表数范围是:-263~263-1。下面声明了一个long类型的变量:
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_41_2.jpg?sign=1739008246-VHNubiXw3PvC1tS34sO8sT7p4Ybf8Kcs-0-f763ad38f6725462892f87f37157c056)
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=1739008246-SPrOgVBR1cBPk3SxmmpZY3Qt5mnK3DWR-0-d696a5ad109c992bb91782f0e1a366c4)
1.float类型
float类型是单精度浮点类型,它占用4个字节的存储空间。
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_41_4.jpg?sign=1739008246-iNvsKaxbVgNQub0pt8QbRUrTU08gYDiE-0-687e483fef3fd9617b121c53240f7a19)
上面的代码声明了一个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=1739008246-RPopx8BmHikYuA7ZIQUCrhtlApMSsZ7J-0-dba7906d0128b1b66800b8cbbbc436d2)
上面的代码声明了一个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=1739008246-68g7kpLpc5Xm9gZaS5k4aLldypRDEcKy-0-5fc1e619ba4778e2c1b2fd7a54bcc6e4)
上面的代码声明了一个char类型的变量chVal,并赋予了一个字符“a”。当我们给一个char类型的变量赋值时,一定要注意使用单引号将字符括起来,你也可以赋值一个大于0小于65535的值(Unicode编码)。
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_42_2.jpg?sign=1739008246-P0H49pMStuFqRcVEQHRZ7EAtkgqi0JFW-0-e3772bdddbb904eaf9a8efb990355dbe)
若我们无意间使用了双引号,在编译时编译器就会报告错误:“不兼容的类型: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=1739008246-2wceMICoGqJr0rSkviuaRP8wQj1pv1dG-0-c4087deea7b1cfc87cab6f1a418b0b13)
我们可以把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=1739008246-MuUVs69bDvH9G7savXlozwyfv1ghpiHl-0-795db9b9a6e658946d37fbfe09511a18)
上面两行代码声明了一个String类型的变量,并给变量赋值为“Hello World!”。注意,在声明字符串变量时,要注意“String”的大小写,不要把“String”写成“string”了,而且在给字符串赋值时要使用双引号包裹住字符串。
给字符串变量赋值还有一些其它的方法:
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_42_5.jpg?sign=1739008246-UJ7kHJoyHpoQyOBG4ICtA8AQ9hgBdYQr-0-232ce7022e7bd7527a63a455b2c84792)