Java从入门到精通(第7版)
上QQ阅读APP看书,第一时间看更新

3.2 基本数据类型

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

3.2.1 整数类型

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

表3.1 整型数据类型

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

1.int型

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

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

     00000000 00000000 00000000 00000101

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

等同于如下代码:

2.byte型

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

     byte a;
     byte a, b, c;
     byte a = 19, b = -45;
3.short型

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

     short s;
     short s, t, r;
     short s = 1000, t = -19;
     short s = 20000 / 10;
4.long型

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

注意

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

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

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

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

3.2.2 浮点类型

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

表3.2 浮点型数据类型

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

误区警示

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

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

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

运行结果如下:

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

3.2.3 字符类型

1.char型

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

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

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

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

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

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

运行结果如下:

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

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

2.转义字符

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

表3.3 转义字符

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

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

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

运行结果如下:

     \
     ★

3.2.4 布尔类型

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

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

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

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