![Java无难事:详解Java编程核心思想与技术](https://wfqqreader-1252317822.image.myqcloud.com/cover/59/35011059/b_35011059.jpg)
2.2 数据类型
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt002_2.jpg?sign=1738923962-mGHPnv6e22X6hap0GOoDlBeUvApuS2cF-0-eb111a96477e746e806cc238686c0e7d)
扫码看视频
Java的数据类型分为基本数据类型和引用数据类型,如图2-1所示。基本数据类型分为四类(共8种):
● 布尔型——boolean
● 字符型——char
● 整数类型——byte、short、int、long
● 浮点数型——float、double
引用数据类型包括类、接口、数组和枚举。
本节我们介绍Java中的8种基本数据类型和常用的String类型。
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt002_3.jpg?sign=1738923962-S1IQA81cvJPLvMO8mzkgl8A6V2si2SWy-0-2b9390713923718ee3ff69b0e6ae783b)
图2-1 Java的数据类型
2.2.1 整数类型
Java各整数类型有固定的表数范围和字节长度,而不受具体操作系统的影响,以保证Java程序的可移植性,如表2-1所示。
表2-1 Java的整数类型
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt002_4.jpg?sign=1738923962-tSgdoMHzcv8s86hXku20xW0oTjcADIGt-0-651165a9cfe49afea1dbeef492c975b9)
1.byte类型
byte类型是一个有符号的8位二进制数(也就是1个字节),它的表数范围是:-128~127。下面声明了一个byte类型的变量:
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt002_5.jpg?sign=1738923962-xgYgdxdH846JhTqUIEgLPb3O3Q0plLJB-0-80b0a75eb4f2eeb685c9df9442d5382e)
需要注意的是,byte类型是一个有符号的1个字节的整数,如果你给byteVal赋值-129或者128,这就超过了byte类型的表数范围,编译器会报告错误“不兼容的类型:从int转换到byte可能会有损失”。
2.short类型
short类型是一个有符号的16位二进制数(也就是2个字节),它的表数范围是:-215~215-1。下面声明了一个short类型的变量:
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt002_6.jpg?sign=1738923962-taBfWjecFsxEXcUWlSK2jBOo6FF6mXwL-0-21ec90c9ea016dd6fc2fed074c809e85)
3.int类型
int类型是一个有符号的32位二进制数(也就是4个字节),它的表数范围是:-231~231-1。下面声明了一个int类型的变量:
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt002_7.jpg?sign=1738923962-Zk4364MH9zN2FzNmXxeIGyWvvhgi9Vmi-0-6769cf81bdf602fe522c8740e176fa2a)
4.long类型
long类型是一个有符号的64位二进制数(也就是8个字节),它的表数范围是:-263~263-1。下面声明了一个long类型的变量:
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt002_8.jpg?sign=1738923962-xR9rf8R1yfX7vYK8EBpMq3mCL6eClRpp-0-712db342ce477d7b9adea1af38401b8c)
2.2.2 浮点类型
Java浮点类型遵循IEEE 754标准,关于该标准,感兴趣的读者可以自行查阅相关资料。不过有一点需要读者注意:浮点数的存储方式与整数是不同的。Java浮点类型有固定的表数范围和字节长度,如表2-2所示。
表2-2 Java的浮点类型
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt002_9.jpg?sign=1738923962-ql5ObsZdmq67b1qJDE9IFqvDKOiSg5LK-0-0f640ba7d9141207edd8519122d45e75)
1.float类型
float类型是单精度浮点类型,它占用4个字节的存储空间。
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt002_10.jpg?sign=1738923962-sYwJiox5UKyoaBuZEoq7ollC3twDWWm1-0-e781227606ddf2eb97d743eec7ca25ff)
上面的代码声明了一个float类型的变量,并赋值为3.14。读者会发现3.14后面有个字母“f”,这个“f”标识前面的数字是float类型的浮点数。如果我们把f去掉会是什么结果呢?编译器会报告错误:“不兼容的类型:从double转换到float可能会有损失”。
在Java源程序中,当我们直接书写一个小数(如1.5)时,Java编译器默认这个数值是一个double类型的浮点数。因此,我们在为一个float类型的变量赋值时,需要在数字后面添加字母“f”或者“F”。
2.double类型
double类型是双精度浮点类型,它占用8个字节的空间,精度比float类型要高。
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt002_11.jpg?sign=1738923962-84T7fwv48gQBlS5gDf2IIf6s6WGfSRI0-0-ce48949ccb695d9644b3443e7945f01a)
上面的代码声明了一个double类型的变量,并赋值为3.14。在给double类型的变量赋值时,书写的小数就不需要添加任何后缀了。
2.2.3 字符(char)型
char类型数据用来表示通常意义上的“字符”。在Java中,char类型比较特殊,它本质上是一个无符号的16位二进制数(2个字节)。Java为了让char类型能够存储多种语言的字符,采用了Unicode来对字符进行编码,而Unicode是采用双字节无符号数对字符进行编码的字符集,所以在Java中,char类型占用2个字节。
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt002_12.jpg?sign=1738923962-NmheORPFgvh1QWKo23qtXyvi8aB5WqRB-0-f82c37acf1cd8785f5d0af559714bf76)
上面的代码声明了一个char类型的变量chVal,并赋予了一个字符“a”。当我们给一个char类型的变量赋值时,一定要注意使用单引号将字符括起来,你也可以赋值一个大于0小于65535的值(Unicode编码)。
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt002_13.jpg?sign=1738923962-EWW7qZHAJkqXAZgrQrMJPG2NbjkKpb8S-0-b7c1ae02eb92ca6c894b961f9c184b89)
若我们无意间使用了双引号,在编译时编译器就会报告错误:“不兼容的类型: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中是不允许的。
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt002_14.jpg?sign=1738923962-ssazn13ZplRzWdPl65wAYl7d3qTyFr85-0-fa0a2107b50da8a7a1fe518099ef7ceb)
我们可以把boolean类型的变量想象成开关,它无非就是开或者关两个状态。在声明boolean类型的变量时,熟悉C++的读者可能会把boolean关键字写成bool,这种笔误需要读者小心。
2.2.5 String类型
String类型并不属于上面介绍的8种基本类型,不过String类型在Java中是一个很常用的类型,表示字符串类型。确切地说,String是一个类,它封装了一些关于字符串的操作。
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt002_15.jpg?sign=1738923962-Lijo2nga23MiI0bPXezDkhTIUPlWNx7w-0-fa2ca890b1360d1972367a77143af526)
上面两行代码声明了一个String类型的变量,并给变量赋值为“Hello World!”。注意,在声明字符串变量时,要注意“String”的大小写,不要把“String”写成“string”了,而且在给字符串赋值时要使用双引号包裹住字符串。
给字符串变量赋值还有一些其它的方法:
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt002_16.jpg?sign=1738923962-gXO8CR4gpwnVVW6vC6nbZ2kOS2UzY99b-0-4f61a8ffdf8f43eb60192c37893c3ff9)