
2.2.2 变量的数据类型
Java是一门强类型的编程语言,它对变量的数据类型有严格的限定。在定义变量时必须声明变量的数据类型,在为变量赋值时必须赋予与变量同一种类型的值,否则程序会报错。
在Java中,变量的数据类型分为基本数据类型和引用数据类型两种。Java中的所有数据类型如图2-4所示。

图2-4 变量的数据类型
图2-4中的8种基本数据类型是Java语言内嵌的,在任何操作系统中都具有相同的大小和属性,而引用数据类型是在Java程序中由程序员自己定义的类型。此处重点介绍的是Java中的基本数据类型,引用数据类型会在后续章节中进行详细讲解。
1.整数类型变量
整数类型变量用来存储整数数值,即没有小数部分的值。在Java中,为了给不同大小范围内的整数合理地分配存储空间,整数类型分为4种不同的类型,分别是字节型(byte)、短整型(short)、整型(int)和长整型(long),4种类型变量所占存储空间的大小及取值范围如表2-1所示。
表2-1 4种整数类型变量所占存储空间的大小及取值范围

在表2-1中,占用空间是指不同类型的变量占用的内存大小,例如,一个int类型的变量会占用4个字节大小的内存空间;取值范围是指变量存储的值不能超出的范围,例如,一个byte类型的变量存储的值必须是-27~27-1之间的整数。
需要注意的是,在为一个long类型的变量赋值时,所赋值的后面要加上字母L(或小写字母l),说明赋的值为long类型。如果赋的值未超出int类型的取值范围,则可以省略字母L(或小写字母l)。具体示例如下:
long num = 2200000000L; // 所赋的值超出了int类型的取值范围,后面必须加上字母L long num = 198L; // 所赋的值未超出int类型的取值范围,后面可以加上字母L long num = 198; // 所赋的值未超出int类型的取值范围,后面可以省略字母L
2.浮点类型变量
浮点类型变量用于存储小数数值。double类型所表示的浮点数比float类型更精确,两种浮点类型变量所占存储空间的大小及取值范围如表2-2所示。
表2-2 float类型与double类型变量所占存储空间的大小及取值范围

在表2-2中,取值范围中的E(也可写为小写字母e)表示以10为底的指数,E后面的“+”和“-”代表正指数和负指数。例如,1.4E-45表示1.4×10-45。
在Java中,小数会被默认为double类型的值,因此在为一个float类型的变量赋值时,在所赋值的后面一定要加上字母F(或者小写字母f),而为double类型的变量赋值时,可以在所赋值的后面加上字母D(或小写字母d),也可以不加。具体示例如下:
float f = 123.4f; // 为一个float类型的变量赋值,后面必须加上字母f double d1 = 100.1; // 为一个double类型的变量赋值,后面可以省略字母d double d2 = 199.3d; // 为一个double类型的变量赋值,后面可以加上字母d
在程序中也可以为一个浮点数类型变量赋予一个整数数值。例如,下面的写法也是可以的。
float f = 100; // 声明一个float类型的变量并赋整数值 double d = 100; // 声明一个double类型的变量并赋整数值
3.字符类型变量
在Java中,字符类型变量用char表示,用于存储单一字符。Java中每个char类型的字符变量都会占用2个字节。在给char类型的变量赋值时,需要用一对英文半角格式的单引号('')把字符括起来,如'a'。
在计算机的世界里,所有文字、数值都只是一连串的0与1,这些0与1是机器语言,人类难以理解,于是就产生了各种方式的编码,使用一个数值代表某个字符,如常用的字符编码系统ASCII。
虽然各类编码系统加起来有数百种之多,却没有一种包含足够多的字符、标点符号和常用的专业技术符号。这些编码系统之间可能还会相互冲突。也就是说,不同的编码系统可能会使用相同的数值标识不同的字符,这样在数据跨平台时就会发生错误。Unicode就是为了避免上述情况而产生的,它为每个字符制定了一个唯一的数值,因此,在任何语言、平台、程序中都可以安心地使用。Java使用的就是Unicode字符码系统,Unicode中的小写字母a是用97表示的,在计算时,计算机会自动将字符转换为所对应的数值。
定义字符型变量的具体示例如下:
char c = 'a'; // 为一个char类型的变量赋值字符a char ch = 97; // 为一个char类型的变量赋值整数97,相当于赋值字符a
4.布尔类型变量
在Java中,使用boolean定义布尔类型变量,布尔类型变量只有true和false两个值。定义布尔类型变量的具体示例如下:
boolean flag = false; // 定义一个boolean类型的变量flag,初始值为false flag = true; // 改变变量flag的值为true