![Java王者归来:从入门迈向高手](https://wfqqreader-1252317822.image.myqcloud.com/cover/394/27563394/b_27563394.jpg)
3-2 基本数据类型
Java的基本数据类型可以分成下列三类:
(1)数值(Numeric)数据类型,又可分为整数与浮点数。
(2)字符(char)。
(3)布尔值(boolean)。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P33_757765.jpg?sign=1739532209-LoBIkfqw021eLP8vf8EVO5xFeqdGk0om-0-fb42d35ce27b50efdc9723f960c85b70)
注 在Unicode规则下,有人也将字符归类为数值数据类型。
3-2-1 整数数据类型
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-T33_757768.jpg?sign=1739532209-JuVWukjctv90NYgy818hjq8hBQSURiB9-0-f9a5c5d544f3b400cc5896f6558c0014)
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P33_519060.jpg?sign=1739532209-pC9aW2sA30gGpVkCwMSRzTJZuIKHcoC1-0-3bc1d0cac0c1c21ac766fd4a52f0e0c7)
在Java程序设计中,上述8位(bit)又称1字节(byte)。整数有以下4种表示方法。
(1)十进制(Decimal):这是人们日常生活中所使用的表达方式,不做特别设置时,就是属于十进制的表示方法。
(2)二进制(Binary):在程序中以0b或0B开头的数字就是属于二进制的数字,在这种表达方式中,每一位数只能表达0或1。例如:
0b111=7
0B10=2
(3)八进制(Octal):在程序中以0开头的数字就是属于八进制的数字,在这种表达方式中,每一位数可以表达0~7。例如:
010=8
022= 18
(4)十六进制(Hexadecimal):在程序中以0x或0X开头的数字就是属于十六进制的数字,在这种表达方式中,每一位数只能表达0~15,其中,10~15分别用A~F(a~f)表示。例如:
0x1A=26
0X2B=43
程序实例ch3_8.java:不同位数整数输出的应用。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P34_757975.jpg?sign=1739532209-1wZMqOeHhwW5ttWVnMeuZvA8jNUepyRT-0-7f01b2f758912355af9015b23ff83f0e)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P34_519543.jpg?sign=1739532209-OFqr9L3srDrmmdHTXVcyM692eMv4r6N1-0-1ded9fcf687c13dde0f88183b7e45589)
另外必须注意以下几点。
(1)在设置整数值时,Java默认是将整数设为int数据类型,如果想用long(长整数)代表这个值,必须在值的后面加上L或l。虽然可以用英文小写l表示长整数,但是因为容易和阿拉伯数字1搞混,所以程序设计时建议使用大写的L。例如:
x=123456L
(2)如果位数很多时,可以在数字间适当位置加下画线(_),以方便阅读。例如:
1_00000代表100000,相当于10万
1_000_000代表1000000,相当于1百万。
程序实例ch3_9.java:长整数和加下画线数字表示法的应用。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P35_757976.jpg?sign=1739532209-zqetudxI5RHMZ5FPpQvgcgnUe1N9boqx-0-f9edae1734975a4b2d6ca57616864351)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P35_757774.jpg?sign=1739532209-fZLjVaqyy1dO98xqXOAefk2kQ2VIQ5AI-0-a1753b8a174ae0b2945245af2c41f297)
(3)数值超出范围。
在每一种整数数据类型中,每一种数值都有可以表达的数值范围,如果程序运算超出范围时,在编译程序过程中会自动产生错误。
程序实例ch3_10.java:使用短整数(short)时,程序设计超出变量数据类型可以表达的范围(-32 768~32 767)。程序编译时,就会产生错误。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P35_757978.jpg?sign=1739532209-ocGiAs8zAOUeg60juHIudAwRWbzOHzKd-0-5648d0d67e385d80d9d69d5933284800)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P35_519977.jpg?sign=1739532209-3GL3onPknp0KmayuRUO80hYUYq94Wv4b-0-5678d5d11000b28b64f96902bedb8465)
程序实例ch3_11.java:列出4种整数数据类型的最大值与最小值。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P35_757979.jpg?sign=1739532209-mXIBZUTdtPSFibn89OwTqmqICe86ahQC-0-937cf7cc9d41371e1ede5bfb7eb6d836)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P35_757775.jpg?sign=1739532209-EA9NkkFEwwzPhFsYqZBmMtNf9loyBd3v-0-d0dc6d7f3b3764a7c251ef3d60a7eeda)
在之前的程序实例中都是使用System.out.println(),输出后会换行,这个实例中使用System.out.printf(),最大的差异是输出后不会换行,printf()中的“f”是format,可解释为格式化,主要作用是将输出数据格式化后再显示。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P36_520390.jpg?sign=1739532209-1DjybJPoJnO9N1zxKeAQ3jCB2GzxjyMd-0-dd45e50b0353361c8ba0b534d1f95e41)
上述第一个参数区是字符串区,在此字符串区有要显示的字符串数据与格式控制符号,第一个出现的格式控制符号会给第一个出现的变量使用,其他以此类推。其中,与整数有关的格式控制符号如下:
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-T36_757777.jpg?sign=1739532209-i7iAFDD9WTeELUQpIFErnD2hwD8ohtUR-0-8ac1a69e1a6623f183bbcc1393be6306)
在上述程序中,Byte、Short、Integer、Long是java.lang包中Number类的子类,至于MIN_VALUE和MAX_VALUE则是这些类的静态(static)成员,读者可以先不考虑这么多,只要了解,可以用上述获得整数数据类型的最大与最小值即可,在第18章中会做完整说明。
3-2-2 浮点数数据类型
程序设计时可以依照值的范围,选择浮点数的使用,有两种浮点数数据类型,可参考下表,分别是浮点数(float)和双倍精度浮点数(double)。Java默认环境是使用double。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-T36_757778.jpg?sign=1739532209-jnR6DDNWjNPUJloUtXI0TxoyxHihmJvx-0-31ba63c7c876172bc5a2645b6e861692)
在程序设计时,带小数点的数值就是所谓的浮点数,例如,0.5、9.23、0.0129等。如果整数部分是0,可以省略整数部分,例如,0.0129可以用.0129表示。如果所设置的数值是没有小数点的整数值,经设置后也将变为浮点数,可参考ch3_12.java第9、10行。
另外,可以使用科学记数法表示浮点数,例如,0.0129可以用1.29E-2表示,1780.0可以用1.78E3表示。
程序实例ch3_12.java:浮点数输出的应用。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P36_520595.jpg?sign=1739532209-FaXBS1W4lFGBP7QBIiPZkCwLLdejbjbl-0-104b999e3ccb4e3856671fdcc4153444)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P36_520601.jpg?sign=1739532209-gIsnxmvNUtqGyObj3b2Yw77NyTf46Yu2-0-17cfc5628335e6f30d21f269773e20f8)
Java在默认的环境下会将所有带小数点的数值设为double,有的程序设计师习惯在数值后面将上D或d强调这是double。如果想要将某一带小数点的数值设为float,可以在该数值后面加上F或f。
程序实例ch3_13.java:float浮点数的应用。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P36_520604.jpg?sign=1739532209-raTThouDjz75Z0OGrkYNjyaw4kWTjUz6-0-c8591307cc3e2aa99e60f0a6e77f8ded)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P36_520610.jpg?sign=1739532209-yzil1Qj72L3woatzfGusDWCQv1PHeB7x-0-489ddcc80e68ca5de54864fead7093d2)
在程序设计时,如果感觉含小数点的数值所需的空间不用太大,可以将变量设为float,在这种情况下可以节省内存空间,提高程序执行效率。例如,有两个大小不同的行李箱,假设要出差日本三天,如果需要轻便出行,可以使用小行李箱放置行李,也可以使用大行李箱放置。当选择小行李箱时,可以让自己行动更迅速。
程序设计时最常发生的错误是,当声明变量是float数据类型时,在设置变量值的过程中忘了在此数值后面加上F或f,这时会因为数值本身是double,变量声明为float,因为放不下所以产生错误。
程序实例ch3_14.java:第3行设置变量x是float,第5行设置数值是double,所以程序出错。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P37_758003.jpg?sign=1739532209-s3V8oEAMqZAwXzHcjRxaHU3lG3WK72lM-0-d4c1488e0d6aa6ef0a8eef3e3d0e28e1)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P37_521020.jpg?sign=1739532209-aK6KpiKKTkxdocDtozJ0q9OKU4Cm2wOr-0-4d16105e6b6307613c838983aeea352a)
程序实例ch3_15.java:列出float和double数据的2的指数的最大值与最小值。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P37_521023.jpg?sign=1739532209-IpN7ASJp9rHAtlNjaITCVpFw4f3MhRyf-0-8414cce32a4345675dd109bd2a7845de)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P37_521029.jpg?sign=1739532209-NTQMt625UFbLK0rDrHno0C1HkI0fqYIw-0-0d11e57f3c1cbccc6a9e2d79dd6f5aea)
3-2-3 字符数据类型
Java语言是用16位空间的Unicode存储字符数据与执行编码方式,所以全球所有语言的字符都可以表达。Unicode值的范围为0~65535,以英文字而言,一个英文字母就是一个Unicode字符,若以中文字而言,一个中文字是一个Unicode字符,使用时需用单引号括起来。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P37_521037.jpg?sign=1739532209-MwD14uAfznz8M45rQLk4qYaGONnbcpi1-0-b14bb20a435c18a2887b926133661dcb)
注 (1)人与计算机之间的沟通主要就是靠字符,由于每个字符均有Unicode值,计算机就是靠每个字符的Unicode值标识的。
注 (2)字符的编码有许多种,Java是使用Unicode,这个编码的特色是独立存在,与操作系统平台或程序语言没有关联。
程序实例ch3_16.java:字符数据输出的应用。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P38_521467.jpg?sign=1739532209-y02qxJfcgItYZRj6qNuq9YkHinpOkru0-0-bda1fb4e14eea29361380382186aeef2)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P38_521473.jpg?sign=1739532209-wZP0kBipMlwapjmOM9RJUvvhuCONg7vz-0-f5bfa229a49aba0b014e07fe1e719288)
程序设计时也可以使用一个Unicode的数值代表一个字符,这个数值又称Unicode码,在执行输出此字符时,会输出此Unicode码所代表的字符。
程序实例ch3_17.java:设置一个Unicode码给一个字符变量,然后输出此Unicode码所代表的字符。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P38_521476.jpg?sign=1739532209-b9CcPHquc4vas9pnQn5vQAMIqb8RmxWy-0-cd60b6419b592bf9792a9c159628a831)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P38_521482.jpg?sign=1739532209-PT15e90LSC8IXNVAdHF9r0SdydteCfhM-0-6b4e145fec3f62d0dcf260dde1965da7)
虽然上述程序可以执行,不过在复杂的Java程序中很容易让人误以为ch是整数变量,造成对程序内容的误判。一般Java程序设计师会用转义字符(Escape Character)序列“\uXXXX”方式处理Unicode码值,其中,X是十六进制数值。
程序实例ch3_18.java:以“\uXXXX”方式扩充设计ch3_17.java。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P38_521504.jpg?sign=1739532209-yttfhbZJeWDZxAZGGBIHVjgSmvcBLLow-0-420cbfb31628de5616459acb7a4dcd78)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P38_521510.jpg?sign=1739532209-jgw9tQTq78eNvj3x60F6NqErpH9SdvIQ-0-6e265238ac8b0d3ab5befe779e12ed42)
在上述程序设计中,原先65的十六进制表示法是0x41,当转成转义字符序列“\uXXXX”方式处理时,0x需舍去,同时需用4个十六进制数字填入转义字符序列,在此是用00填补在41前方,所以第4行是“\u0041”。另外,在Unicode码值中“\u9B41”是中文字的“魁”,所以可以得到上述执行结果。
在字符串使用中,如果字符串内有一些特殊字符,例如,单引号、双引号等,必须在此特殊字符前加上“\”(反斜线),才可正常使用,这种含有“\”符号的字符称为转义字符(Escape Character)。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-T38_757999.jpg?sign=1739532209-QG3DyFWMMHnTkSwn2W1wUxGGZpK9FYtp-0-314ca46e5901b426375d85ebd24d6ddc)
程序实例ch3_19.java:转义字符的应用。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P38_521707.jpg?sign=1739532209-6qa9xa78Qlirex1QHymOKDhzHdzjFjet-0-e0795065da9b47b726cf76b945db49ce)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P38_521713.jpg?sign=1739532209-hPzt26FFFxCMoxda13VzOri2tiXHVJCb-0-cbdeddbdd39c40b59891636ceaa8530c)
程序实例ch3_20.java:列出Unicode的值范围。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P39_757980.jpg?sign=1739532209-5XlSEAPFhzAWInZiXz9dfI2nGJb2Itjv-0-949b0faace52be5364704797b07dca3b)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P39_522127.jpg?sign=1739532209-wVoF7TFMR7Lby2QZHLCCQ0NBvgoRfn6Y-0-3c1c43e027430cfa2fd073fad5846017)
程序实例ch3_20_1.java:测试转义字符的“\r”符号,由于光标会返回到最左边,所以可以覆盖先前输出的字符。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P39_522130.jpg?sign=1739532209-H8CViCChag548DcOOWoEF98LHUacg1HD-0-0858d20ae61d472bd5504ed96a438433)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P39_522136.jpg?sign=1739532209-nW4Os6VsQ3GqIRM2gr2Y4Ei5DECiLG58-0-ac57dadb759f45fd472c4a35a61fe3a2)
程序实例ch3_20_2.java:测试转义字符的“\t”符号,可以按Tab键默认位移空间输出。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P39_522139.jpg?sign=1739532209-sM9Iw3ayffDuFbwRrPvIW7XFLyFB5WCB-0-9b7a4119cc6c467bf2cd95d7f3e0a31f)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P39_757802.jpg?sign=1739532209-MXSULoFjp0gDqwGmk4lvLoC21uVgx64N-0-4107e1414918c9232f45284d3767de7d)
3-2-4 布尔值
布尔值常用于程序的流程控制,它的数据值有true或false。后面在程序流程控制中会更详细地说明它的应用。
程序实例ch3_21.java:列出布尔值的应用。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P39_522149.jpg?sign=1739532209-qHG1PyHKPqI6Owp8m7JvOgrh8C7kOdrV-0-b076a7b367155402f0b30a66ea88ba48)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P39_757801.jpg?sign=1739532209-adeoEG5WYZzjKf4ISzO0ENtVTWtmJfrQ-0-d427bddee38f3418f523a84c5cd2d1df)
程序实例ch3_22.java:列出布尔值的范围。
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P39_757998.jpg?sign=1739532209-xRHsiAFxwEHVRyKTbfEj4H0J4LwKiRkP-0-9d7c1335b499363d3b1261a98dc9b553)
执行结果
![](https://epubservercos.yuewen.com/9E44AA/15825993204148006/epubprivate/OEBPS/Images/Figure-P39_757800.jpg?sign=1739532209-KiS2V9iboHiKnWV5yHateK9HrlC4Cw6T-0-02ddb76641777f9ad5aefa8a5683c42b)