
2.4 基本数据类型
Java提供了8种基本数据类型,其中6种是数值型(4种整数型,2种浮点型),2种是非数值型(字符型和布尔型),如图2-5所示。

图2-5 Java基本数据类型
2.4.1 整数类型
整数类型用来存储整数数值,即没有小数部分的数值。可以是正数,也可以是负数。整数类型根据它在内存中所占大小的不同,可以分为byte、short、int和long 4种类型。它们具有不同的取值范围,如表2-3所示。这4种数据类型占据的空间大小不同,取值范围也不同,但使用方法是一样的。用户可以根据不同的使用环境,选择不同的类型。
表2-3 Java中的整数类型

☆大牛提醒☆
在给变量或常量赋值时,要注意取值范围,当赋值超过相应范围时就会出错。
1.int型
int型变量在内存中占4字节,也就是32bit(位),在计算机中bit由0和1表示,所以int型的5在计算机中是这样显示的:
00000000 00000000 00000000 00000101
int型变量声明的语法格式如下:
int 变量名=变量初值
例如,以下为int型变量声明示例。

以下为错误的int型变量声明示例。

☆大牛提醒☆
int是Java整型值的默认数据类型,当代码使用整数赋值或输出时,都默认为int型,例如:

这行代码实现的功能与下面的代码一样。

2.byte型
byte型变量的声明与int型变量相同,语法格式如下:
byte 变量名=变量初值
例如,以下为byte型变量声明示例。

以下为错误的byte型变量声明示例。

3.short型
short型变量的声明与int型变量相同,语法格式如下:
short变量名 = 变量初值
例如,以下为short型变量声明示例。

以下为错误的short型变量声明示例。

4.long型
long型变量的取值范围比int型大,且属于高级的数据类型,为此在赋值时必须要注明长整型标识,就是用字母L或l写在数值后面,来与int型变量区分。声明的语法格式如下:
long 变量名=变量初值
例如,以下为long型变量声明示例。

以下为错误的long型变量声明示例。

2.4.2 浮点类型
浮点型数据表示有小数部分的数字,Java中浮点型分为单精度float和双精度double两种类型,它们具有不同的取值范围,如表2-4所示。
表2-4 Java中的浮点类型

默认情况下小数都被看作double型,如果需要使用float型声明小数,则必须在小数后面添加标识符F/f,否则会出错。另外,可以使用后缀D或d来明确表明这是一个double型数据,但加不加D或d并没有硬性规定。以下为浮点类型变量声明示例。
float x =12.25f; double y = 2.658d; double z = 2.369;
以下为错误的float型变量声明示例。

☆大牛提醒☆
浮点型数据值是近似值,在系统中计算后的结果会与实际值有偏差。
【例2.4】灵活玩遍算术题。使用int、float和double类型的数据进行简单的算术运算(源代码\ch02\2.4.txt)。

运行结果如图2-6所示。

图2-6 数值型数据类型运算输出结果
2.4.3 字符类型
Java可以把字符作为整数对待。由于Unicode编码采用无符号编码,可以存储65536个字符,其中最小值为\u0000(即0),最大值为\uffff (即65535),所以Java中的字符可以处理大多数国家的语言文字。不过有些字符有多种作用,这就有了转义字符的概念。
1.char型字符
字符型数据类型char是用于存储单个字符,它占用16位(2字节)的内存空间,在声明字符型变量时,要以单引号标识,如a就表示一个字符。声明char型变量,实例代码如下:

如果想要得到一个0~65535的数代表Unicode表中相应位置上的字符,必须使用char型显式转换。例如:
char myChar =99; System.out.println(myChar);
输出结果为:
c
这是因为99对应的是小写字母c的Unicode编码。
char的默认值是空格,char还可以与整数做运算。例如:
char myChar = 'c',newChar; newChar = (char) (myChar + 1); System.out.println(newChar);
输出结果为:
d
这是因为小写字母c的Unicode编码再加1,就是d。
2.转义字符
Java的转义字符是一种特殊的字符变量,以反斜杠“\”开头,后跟一个或多个字符。转义字符具有特定的含义,不同于字符原有的意义。Java中的转义字符集如表2-5所示。
表2-5 Java中的转义字符集

【例2.5】转义字符的应用。创建EscapeCharacter类,在类中定义多个转义字符并输出(源代码\ch02\2.5.txt)。

运行结果如图2-7所示。

图2-7 转义字符运算输出结果
2.4.4 布尔类型
布尔型又称逻辑型,只能取两个值true和false,分别代表布尔逻辑中的“真”与“假”。Java中布尔值不能与整数型相互转换。布尔值一般用在逻辑判断语句中。布尔型变量声明示例如下:
boolean myFlag = true; System.out.println(myFlag);
输出结果为:
true
【例2.6】布尔型数据类型的应用。创建OpenDoor类,首先弹出输入提示,然后获取用户输入的值,判断用户输入的值是否与默认值相等,最后将结果赋给一个boolean变量并输出(源代码\ch02\2.6.txt)。

运行结果如图2-8所示。

图2-8 判断口令是否正确
☆大牛提醒☆
实例【例2.6】中使用了新的Java语句:控制台获取数据。这里读者不必深究其声明与使用的过程,该部分涉及对象引用的概念,这部分的知识会在后面的章节中详细介绍。
2.4.5 字符串类型
字符本身只能够包含单个的内容,这在很多情况下是无法满足要求的,所以在Java中专门提供了一种String类型。String是引用型数据,是一个类(因此String的S一定要大写),但是这个类稍微特殊一些。如果现在使用abc在Java之中就表示定义了字符串abc。
在String类型的变量上使用了“+”,则对于String而言表示要执行字符串的连接操作。但“+”既可以表示出数据的加法操作,也可以表示字符串连接,那么如果这两种操作碰到一起会怎么样呢?如果遇到了与字符串的加法操作,所有的数据类型(基本、引用)都会自动地变为String型数据。
【例2.7】输出字符串数据类型(源代码\ch02\2.7.txt)。

运行结果如图2-9所示。

图2-9 字符串数据类型运算输出结果