2.2基本数据类型
在Java中有8种基本数据类型来存储数值、字符和布尔值。
2.2.1整数类型
整数类型简称整型,用来存储整数数值,即没有小数部分的数值。可以是正数,也可以是负数。整型数据根据它所占内存大小的不同,可分为byte、short、int和long 4种类型。它们具有不同的取值范围,如表1所示。
表1整型数据类型
数据类型 | 内存空间(8位等于1字节) | 取值范围 |
---|---|---|
byte | 8位 | -128~127 |
short | 16位 | -32768~32767 |
int | 32位 | -2147483648~2147483647 |
long | 64位 | -9223372036854775808~9223372036854775807 |
下面分别对这4种整型数据类型进行介绍。
1.int型
定义int型变量有以下4种语法:
int x; //定义int型变量x
int x,y; //同时定义int型变量x,y
int x = 10,y = -5; //同时定义int型变量x,y并赋予初值
int x = 5 + 23; //定义int型变量x,并赋予公式(5+23)计算结果的初值
int型变量在内存中占4字节,也就是32位,在计算机中bit是由0和1来表示的,所以int型值5在计算机中是这样显示的:
00000000000000000000000000000101
int型是Java整型值的默认数据类型。当对多个尚未定义数据类型的整数做运算时,运算的结果将默认为int类型。例如,下面这行代码:
System.out.println(15 + 20); //输出35
等同于如下代码:
int a = 15;
int b = 20;
int c = a + b;
System.out.println(c); //输出35
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类型变量,代码如下:
long number;
long number,rum;
long number = 12345678l,rum = -987654321L;
long number = 123456789L*987654321L;
注意:整数在Java程序中有3种表示形式,分别为十进制、八进制和十六进制:
(1)十进制:十进制的表现形式大家都很熟悉,如120、0、-127。除了数字0,不能以0作为其他十进制数的开头。
(2)八进制:如0123(转换成十进制数为83)、-0123(转换成十进制数为-83)。八进制数必须以0开头。
(3)十六进制:如0x25(转换成十进制数为37)、0Xb01e(转换成十进制数为45086)。十六进制数必须以0X或0x开头。
2.2.2浮点类型
浮点类型简称浮点型,用来存储含有小数部分的数值。Java语言中浮点类型分为单精度浮点类型(float)和双精度浮点类型(double),它们具有不同的取值范围,如表2所示。
表2浮点型数据类型
数据类型 | 内存空间(8位等于1字节) | 取值范围 |
---|---|---|
float | 32位 | 1.4E-45~3.4028235E38 |
double | 64位 | 4.9E-324~1.7976931348623157E308 |
在默认情况下小数都被看作double型,若想使用float型小数,则需要在小数后面添加F或f。另外,可以使用后缀d或D来明确表明这是一个double类型数据,但加不加d或D并没有硬性规定。而定义float型变量时,如果不加F或f,系统会认为是double类型数据,进而出错。定义浮点类型变量,代码如下:
float f1 = 13.23f;
double d1 = 4562.12d;
double d2 = 45678.1564;
误区警示:浮点值属于近似值,在系统中运算后的结果可能与实际有偏差。
【例1】根据身高体重计算BMI指数
创建BMIexponent类,声明double型变量height来记录身高,单位为米;声明int型变量weight记录体重,单位为千克;根据BMI=体重/(身高×身高)计算BMI指数。实例代码如下:
public class BMlexponent{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.5System.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.9System.out.println("肥胖");} }
}
运行结果如下:
您的身高为:1.72您的体重为:70
您的BMI指数为:23.661438615467823
您的体重属于:正常范围
2.2.3字符类型
1.char型
字符类型(char)用于存储单个字符,占用16位(两个字节)的内存空间。在定义字符型变量时,要以单引号表示,如's'表示一个字符。但是“s”则表示一个字符串,虽然只有一个字符,但由于使用双引号,它仍然表示字符串,而不是字符。
使用char关键字可定义字符变量,其语法如下:
charx = 'a';
由于字符a在Unicode表中的排序位置是97,因此允许将上面的语句写成:
charx = 97;
同C和C++语言一样,Java语言也可以把字符作为整数对待。由于Unicode编码采用无符号编码,可以存储65536个字符(0x0000~0xfff),所以Java中的字符几乎可以处理所有国家的语言文字。若想得到一个0~65536的数所代表的Unicode表中相应位置上的字符,也必须使用char型显式转换。
【例2】查看字符与Unicode码互转的结果
在项目中创建类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);}
}
运行结果如下:
d在Unicode表中的顺序位置是:100@在Unicode表中的顺序位置是:64
Unicode表中的第23045位是:鿕
Unicode表中的第45213位是:낝
String类型为字符串类型,可以用来保存由多个字符组成的文本内容,其用法与字符类型类似,但文本内容需要用双引号标注。
2.转义字符
转义字符是一种特殊的字符变量,它以反斜杠“\”开头,后跟一个或多个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”。例如,printf函数的格式串中用到的“\n”就是一个转义字符,意思是“回车换行”。Java中的转义字符如表3所示。
表3转义字符
转义字符 | 含义 |
---|---|
\ddd | 1~3位八进制数据所表示的字符,如\123 |
\uxxxx | 4位十六进制数据所表示的字符,如\u0052 |
\' | 单引号字符 |
\\ | 反斜杠字符 |
\t | 垂直制表符,将光标移到下一个制表符的位置 |
\r | 回车 |
\n | 换行 |
\b | 退格 |
\f | 换页 |
将转义字符赋值给字符变量时,与字符常量值一样需要使用单引号。
【例3】输出'\'字符和'★'字符
'\'字符的转移字符为'\\',★'字符的Unicode码为2605,实例代码如下:
public class Demo{public static void main(String[] args){char c1 = '\\'; //将转义字符'\\'赋值给变量c1char char1 = '\u2605'; //将转义字符"u2605’赋值给变量char1System.out.println(c1); //输出结果\System.out.println(char1); //输出结果★}
}
运行结果如下:
\
★
2.2.4布尔类型
布尔类型又称逻辑类型,简称布尔型,通过关键字boolean来定义布尔类型变量。布尔类型只有true和false两个值,分别代表布尔逻辑中的“真”和“假”。布尔值不能与整数类型进行转换。布尔类型通常被用在流程控制中,作为判断条件。定义布尔类型变量,代码如下:
boolean b; //定义布尔型变量b
boolean b1,b2; //定义布尔型变量b1、b2
boolean b=true; //定义布尔型变量b,并赋给初值true