基本数据类型

在 Java 中有 8 种基本数据类型来存储数值、字符和布尔值,如图3.1 所示。

image 2023 12 12 13 45 28 523

整数类型

整数类型简称整型,用来存储整数数值,即没有小数部分的数值。它们可以是正数,也可以是负数。整型数据根据它所占内存大小的不同,可分为 byte、short、int 和 long 4种类型。它们具有不同的取值范围,如表3.1 所示。

image 2023 12 12 13 55 22 336
Figure 1. 表3.1 整型数据类型

下面分别对这 4 种整型数据类型进行介绍。

int型

定义 int 型变量有以下 4 种语法:

image 2023 12 12 14 00 04 335

int 型变量在内存中占 4 字节,也就是 32 位,在计算机中 bit 是由 0 和 1 来表示的,所以 int 型值 5 在计算机中是这样显示的:

00000000 00000000 00000000 00000101
bash

int 型是 Java 整型值的默认数据类型。当对多个尚未定义数据类型的整数做运算时,运算的结果将默认为 int 类型。例如,下面这行代码:

image 2023 12 12 14 02 52 610

等同于如下代码:

image 2023 12 12 14 03 16 272

byte型

byte 型的定义方式与 int 型的定义方式相同。定义 byte 类型变量,代码如下:

byte a;
byte a, b, c;
byte a = 19, b = -45;
java

short型

short 型的定义方式与 int 型的定义方式相同。定义 short 类型变量,代码如下:

short s;
short s, t, r;
short s = 1000, t = -19;
short s = 20000 / 10;
java

long型

由于 long 类型变量的取值范围比 int 类型变量的取值范围大,且属于高精度数据类型,因此在赋值时要和 int 型做出区分,需要在整数后加 L 或者 l(小写的 L)。定义 long 类型变量,代码如下:

image 2023 12 12 14 05 41 850

整数在 Java 程序中有 3 种表示形式,分别为十进制、八进制和十六进制。

  • 十进制:十进制的表现形式大家都很熟悉,如 120、0、-127。除了数字 0,不能以 0 作为其他十进制数的开头。

  • 八进制:如 0123(转换成十进制数为83)、-0123(转换成十进制数为-83)。八进制数必须以 0 开头。

  • 十六进制:如 0x25(转换成十进制数为37)、0Xb01e(转换成十进制数为45086)。十六进制数必须以 0X0x 开头。

浮点类型

浮点类型简称浮点型,用来存储含有小数部分的数值。Java 语言中浮点类型分为单精度浮点类型(float)和双精度浮点类型(double),它们具有不同的取值范围,如表3.2 所示。

image 2023 12 12 14 08 00 822
Figure 2. 表3.2 浮点型数据类型

在默认情况下,小数都被看作 double 型,若想使用 float 型小数,则需要在小数后面添加 F 或 f。另外,可以使用后缀 d 或 D 来明确表明这是一个 double 类型数据,但加不加 d 或 D 并没有硬性规定。而定义 float 型变量时,如果不加 F 或 f,系统会认为它是一个 double 类型数据,并出错。定义浮点类型变量,代码如下:

image 2023 12 12 14 09 03 605

浮点值属于近似值,在系统中运算后的结果可能与实际有偏差。

【例3.2】根据身高体重计算BMI指数(实例位置:资源包\TM\sl\3\2)

创建 BMIexponent 类;声明 double 型变量 height 以记录身高,单位为米;声明 int 型变量 weight 以记录体重,单位为千克;根据 BMI=体重/(身高×身高)计算 BMI 指数。实例代码如下:

public class BMIexponent {
	public static void main(String[] args) {
		double height = 1.72;					// 身高变量,单位:米
		int weight = 70; 						// 体重变量,单位:千克
		double exponent = weight / (height * height); 	// BMI计算公式
		System.out.println("您的身高为:" + height);
		System.out.println("您的体重为:" + weight);
		System.out.println("您的BMI指数为:" + exponent);
		System.out.print("您的体重属于:");
		if (exponent < 18.5) { 					// 判断BMI指数是否小于18.5
			System.out.println("体重过轻");
		}
		if (exponent >= 18.5 && exponent < 24.9) {	// 判断BMI指数是否在18.5到24.9之间
			System.out.println("正常范围");
		}
		if (exponent >= 24.9 && exponent < 29.9) {	// 判断BMI指数是否在24.9到29.9之间
			System.out.println("体重过重");
		}
		if (exponent >= 29.9) {					// 判断BMI指数是否大于29.9之间
			System.out.println("肥胖");
		}
	}
}
java

运行结果如下:

您的身高为:1.72
您的体重为:70
您的BMI指数为:23.661438615467823
您的体重属于:正常范围
bash

字符类型

char型

字符类型(char)用于存储单个字符,占用 16 位(两个字节)的内存空间。在定义字符型变量时,要用单引号表示,如 's' 表示一个字符。但是 "s" 则表示一个字符串,虽然只有一个字符,但由于使用双引号,因此它仍然表示字符串,而不是字符。

使用 char 关键字可定义字符变量,其语法如下:

char x = 'a';
java

由于字符 a 在 Unicode 表中的排序位置是 97,因此允许将上面的语句写成:

char x = 97;
java

同 C 和 C++ 语言一样,Java 语言也可以把字符作为整数对待。由于 Unicode 编码采用无符号编码,可以存储 65536 个字符(0x0000~0xffff),因此 Java 中的字符几乎可以处理所有国家的语言文字。若想得到一个 0~65536 的数所代表的 Unicode 表中相应位置上的字符,必须使用 char 型显式转换。

【例3.3】查看字符与 Unicode 码互转的结果(实例位置:资源包\TM\sl\3\3)

在项目中创建类 Gess,编写如下代码,将 Unicode 表中某些位置上的字符以及一些字符在 Unicode 表中的位置输出到控制台上。

public class Gess { 					//定义类
	public static void main(String[] args) { 	//主方法
		char word = 'd', word2 = '@'; 		//定义char型变量
		int p = 23045, p2 = 45213; 		//定义int型变量
		System.out.println("d在Unicode表中的顺序位置是:" + (int) word);
		System.out.println("@在Unicode表中的顺序位置是:" + (int) word2);
		System.out.println("Unicode表中的第23045位是:" + (char) p);
		System.out.println("Unicode表中的第45213位是:" + (char) p2);
	}
}
java

运行结果如下:

d在Unicode表中的顺序位置是:100
@在Unicode表中的顺序位置是:64
Unicode表中的第23045位是:娅
Unicode表中的第45213位是:?
bash

String 类型为字符串类型,可以用来保存由多个字符组成的文本内容,其用法与字符类型类似,但文本内容需要用双引号标注。关于字符串的详细用法请参考本书第 10 章内容。

转义字符

转义字符是一种特殊的字符变量,它以反斜杠 “\” 开头,后跟一个或多个字符。转义字符具有特定的含义,不同于字符原有的意义,故称 “转义”。例如,printf 函数的格式串中用到的 “\n” 就是一个转义字符,意思是 “回车换行”。Java 中的转义字符如表3.3 所示。

image 2023 12 12 14 19 52 476
Figure 3. 表3.3 转义字符

将转义字符赋值给字符变量时,与字符常量值一样需要使用单引号。

【例3.4】输出'\'字符和'★'字符(实例位置:资源包\TM\sl\3\4)

'\' 字符的转移字符为 '\\','★' 字符的 Unicode 码为 2605,实例代码如下:

public class Demo {
	public static void main(String[] args) {
		char c1 = '\\'; // 将转义字符 '\\' 赋值给变量c1
		char char1 = '\u2605'; // 将转义字符 '\u2605' 赋值给变量char1
		System.out.println(c1); // 输出结果\
		System.out.println(char1); // 输出结果★

	}
}
java

运行结果如下:

 \
 ★
bash

布尔类型

布尔类型又称逻辑类型,简称布尔型,通过关键字 boolean 来定义布尔类型变量。布尔类型只有 true 和 false 两个值,分别代表布尔逻辑中的 “真” 和 “假”。布尔值不能与整数类型进行转换。布尔类型通常被用在流程控制中,作为判断条件。定义布尔类型变量,代码如下:

image 2023 12 12 14 22 18 686

编程训练(答案位置:资源包\TM\sl\3\编程训练)

【训练1】统计粮仓的粮食 一个圆柱形粮仓,底面直径为 10 米,高为 3 米,该粮仓体积为多少立方米?如果每立方米屯粮 750 千克,该粮仓一共可储存多少千克粮食?

【训练2】谁该缴税 员工 a 与员工 b 的月薪分别为 4500 元和 5500 元,判断哪位员工需要缴纳个人所得税,哪位员工不需要缴纳个人所得税。(假设工资、薪金所得的个税起征点为 5000 元)