![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=1739143380-YxfVDRC46oPFEojO2HduKanjFpW79ClG-0-f296e54d8ba00ba330aad0f6f9d3b9cf)
图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=1739143380-5aQZnojNd1EyXWI7wHqe6H1qmrdkZiq4-0-5f7e9120624e3b9178565ef366e65327)
1.byte类型
byte类型是一个有符号的8位二进制数(也就是1个字节),它的表数范围是:-128~127。下面声明了一个byte类型的变量:
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_40_3.jpg?sign=1739143380-cOrTTlLzFtWrP7hI04vL7VSHX75c1cnF-0-adf53e88944cfc2f787163238f36c847)
需要注意的是,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=1739143380-vNhYKxceDilYGpXyml2JAwYq4CoH12q9-0-6858c23725e8107031ea7f22c9e0d1ba)
3.int类型
int类型是一个有符号的32位二进制数(也就是4个字节),它的表数范围是:-231~231-1。下面声明了一个int类型的变量:
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_41_1.jpg?sign=1739143380-uoQz1HMqutA0nlVvJmR3bEBJfBmDNtoD-0-72eb164806e57439eb5d8551786cda14)
4.long类型
long类型是一个有符号的64位二进制数(也就是8个字节),它的表数范围是:-263~263-1。下面声明了一个long类型的变量:
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_41_2.jpg?sign=1739143380-GPh01FtNk7OfgaRYzjlH37JVbT8L6Hf1-0-ae05cb56abcceb9237a122e81d729b43)
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=1739143380-YJm1z1vuGBjGEmk7qnftTB4EUnZ1KNXz-0-138f9beb43741a81c9fa0051587431da)
1.float类型
float类型是单精度浮点类型,它占用4个字节的存储空间。
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_41_4.jpg?sign=1739143380-U9SWjZE5dgWisHlxrfShJHVqHDPvnIHC-0-eb9065228ee00c60648e90d14b56068f)
上面的代码声明了一个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=1739143380-gY0Eb7B4vIgqj8Ynu4sLoa89VWHCgSbd-0-6ec1e1a7a4f6b6f194271a37d924df91)
上面的代码声明了一个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=1739143380-4upgPW04i7PiS3VwcXvtSV9qr9vk1sOO-0-06955f12bb267e94cb7ff13e6a2fb8d1)
上面的代码声明了一个char类型的变量chVal,并赋予了一个字符“a”。当我们给一个char类型的变量赋值时,一定要注意使用单引号将字符括起来,你也可以赋值一个大于0小于65535的值(Unicode编码)。
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_42_2.jpg?sign=1739143380-sQaKwIaNr6B35lAk4wISzufk2ybrTPMz-0-0583de064d27956944ffe4344209518e)
若我们无意间使用了双引号,在编译时编译器就会报告错误:“不兼容的类型: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=1739143380-esbyOYqNip5RKT4SqiTVju8k6BRKVJMh-0-e6055c351c1f86f67b496340df29716d)
我们可以把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=1739143380-jE7MrXndtsyk57urYWejGlQeEtu0mD98-0-30c7820041b838ebec70b2a2ca5290ca)
上面两行代码声明了一个String类型的变量,并给变量赋值为“Hello World!”。注意,在声明字符串变量时,要注意“String”的大小写,不要把“String”写成“string”了,而且在给字符串赋值时要使用双引号包裹住字符串。
给字符串变量赋值还有一些其它的方法:
![](https://epubservercos.yuewen.com/2C78EE/26947315207549306/epubprivate/OEBPS/Images/44554_42_5.jpg?sign=1739143380-JnEZeHS6bMAHatqg802UQ1L9ScuGzTUz-0-06c2448538bf679bc87c20b1e958763d)