
3-2 基本数据类型
Java的基本数据类型可以分成下列三类:
(1)数值(Numeric)数据类型,又可分为整数与浮点数。
(2)字符(char)。
(3)布尔值(boolean)。

注 在Unicode规则下,有人也将字符归类为数值数据类型。
3-2-1 整数数据类型


在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:不同位数整数输出的应用。

执行结果

另外必须注意以下几点。
(1)在设置整数值时,Java默认是将整数设为int数据类型,如果想用long(长整数)代表这个值,必须在值的后面加上L或l。虽然可以用英文小写l表示长整数,但是因为容易和阿拉伯数字1搞混,所以程序设计时建议使用大写的L。例如:
x=123456L
(2)如果位数很多时,可以在数字间适当位置加下画线(_),以方便阅读。例如:
1_00000代表100000,相当于10万
1_000_000代表1000000,相当于1百万。
程序实例ch3_9.java:长整数和加下画线数字表示法的应用。

执行结果

(3)数值超出范围。
在每一种整数数据类型中,每一种数值都有可以表达的数值范围,如果程序运算超出范围时,在编译程序过程中会自动产生错误。
程序实例ch3_10.java:使用短整数(short)时,程序设计超出变量数据类型可以表达的范围(-32 768~32 767)。程序编译时,就会产生错误。

执行结果

程序实例ch3_11.java:列出4种整数数据类型的最大值与最小值。

执行结果

在之前的程序实例中都是使用System.out.println(),输出后会换行,这个实例中使用System.out.printf(),最大的差异是输出后不会换行,printf()中的“f”是format,可解释为格式化,主要作用是将输出数据格式化后再显示。

上述第一个参数区是字符串区,在此字符串区有要显示的字符串数据与格式控制符号,第一个出现的格式控制符号会给第一个出现的变量使用,其他以此类推。其中,与整数有关的格式控制符号如下:

在上述程序中,Byte、Short、Integer、Long是java.lang包中Number类的子类,至于MIN_VALUE和MAX_VALUE则是这些类的静态(static)成员,读者可以先不考虑这么多,只要了解,可以用上述获得整数数据类型的最大与最小值即可,在第18章中会做完整说明。
3-2-2 浮点数数据类型
程序设计时可以依照值的范围,选择浮点数的使用,有两种浮点数数据类型,可参考下表,分别是浮点数(float)和双倍精度浮点数(double)。Java默认环境是使用double。

在程序设计时,带小数点的数值就是所谓的浮点数,例如,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:浮点数输出的应用。

执行结果

Java在默认的环境下会将所有带小数点的数值设为double,有的程序设计师习惯在数值后面将上D或d强调这是double。如果想要将某一带小数点的数值设为float,可以在该数值后面加上F或f。
程序实例ch3_13.java:float浮点数的应用。

执行结果

在程序设计时,如果感觉含小数点的数值所需的空间不用太大,可以将变量设为float,在这种情况下可以节省内存空间,提高程序执行效率。例如,有两个大小不同的行李箱,假设要出差日本三天,如果需要轻便出行,可以使用小行李箱放置行李,也可以使用大行李箱放置。当选择小行李箱时,可以让自己行动更迅速。
程序设计时最常发生的错误是,当声明变量是float数据类型时,在设置变量值的过程中忘了在此数值后面加上F或f,这时会因为数值本身是double,变量声明为float,因为放不下所以产生错误。
程序实例ch3_14.java:第3行设置变量x是float,第5行设置数值是double,所以程序出错。

执行结果

程序实例ch3_15.java:列出float和double数据的2的指数的最大值与最小值。

执行结果

3-2-3 字符数据类型
Java语言是用16位空间的Unicode存储字符数据与执行编码方式,所以全球所有语言的字符都可以表达。Unicode值的范围为0~65535,以英文字而言,一个英文字母就是一个Unicode字符,若以中文字而言,一个中文字是一个Unicode字符,使用时需用单引号括起来。

注 (1)人与计算机之间的沟通主要就是靠字符,由于每个字符均有Unicode值,计算机就是靠每个字符的Unicode值标识的。
注 (2)字符的编码有许多种,Java是使用Unicode,这个编码的特色是独立存在,与操作系统平台或程序语言没有关联。
程序实例ch3_16.java:字符数据输出的应用。

执行结果

程序设计时也可以使用一个Unicode的数值代表一个字符,这个数值又称Unicode码,在执行输出此字符时,会输出此Unicode码所代表的字符。
程序实例ch3_17.java:设置一个Unicode码给一个字符变量,然后输出此Unicode码所代表的字符。

执行结果

虽然上述程序可以执行,不过在复杂的Java程序中很容易让人误以为ch是整数变量,造成对程序内容的误判。一般Java程序设计师会用转义字符(Escape Character)序列“\uXXXX”方式处理Unicode码值,其中,X是十六进制数值。
程序实例ch3_18.java:以“\uXXXX”方式扩充设计ch3_17.java。

执行结果

在上述程序设计中,原先65的十六进制表示法是0x41,当转成转义字符序列“\uXXXX”方式处理时,0x需舍去,同时需用4个十六进制数字填入转义字符序列,在此是用00填补在41前方,所以第4行是“\u0041”。另外,在Unicode码值中“\u9B41”是中文字的“魁”,所以可以得到上述执行结果。
在字符串使用中,如果字符串内有一些特殊字符,例如,单引号、双引号等,必须在此特殊字符前加上“\”(反斜线),才可正常使用,这种含有“\”符号的字符称为转义字符(Escape Character)。

程序实例ch3_19.java:转义字符的应用。

执行结果

程序实例ch3_20.java:列出Unicode的值范围。

执行结果

程序实例ch3_20_1.java:测试转义字符的“\r”符号,由于光标会返回到最左边,所以可以覆盖先前输出的字符。

执行结果

程序实例ch3_20_2.java:测试转义字符的“\t”符号,可以按Tab键默认位移空间输出。

执行结果

3-2-4 布尔值
布尔值常用于程序的流程控制,它的数据值有true或false。后面在程序流程控制中会更详细地说明它的应用。
程序实例ch3_21.java:列出布尔值的应用。

执行结果

程序实例ch3_22.java:列出布尔值的范围。

执行结果
