数据类型
数据类型是指数据的内在表现形式。Java语言是一个强调数据类型的语言,在声明任何变量时,必须将该变量定义为一种数据类型。根据数据的不同形式,数据就划分为多种不同的类型。数据类型不同,所进行的运算不同,取值范围也不同。Java提供的数据类型包括:基本数据类型和复合数据类型。在本章中主要介绍数据的基本类型。Java程序中,总共有8大基本类型,其中4种整型、1种字符型、2种浮点型、1种布尔型,除了这几种基本类型外,其他都属于复合数据类型。表4.1体现了Java语言中的各数据类型的划分。
表4.1 数据类型
基本数据类型 |
数型值 |
整型:byte(字节型)、short(短整型)、int(整型)、long(长整型) |
实型:float(单精度)、double(双精度) | ||
字符型:char | ||
布尔型:boolean | ||
复合数据类型 |
数组 |
|
类 | ||
接口 |
在Java中基本数据类型又可分为:整型(byte、short、int、long),实型(float、double),字符型(char)和布尔型(boolean)。下面就从整型开始逐一做简单的介绍。
整型数据
整型数据是最普通的数据类型,用于表示整数,可分别用常量和变量来表示。Java语言中定义了4种整数数据类型:byte(字节型)、short(短整型)、int(整型)和long(长整型),这些都是有符号整数,也就是通常所说的正数和负数。
4.1.1 整型变量与常量
整型常量可以分为:十六进制数,八进制整数,十进制整数。整型变量可以分为byte(字节型)、short(短整型)、int(整型)和long(长整型)。下面分别看一下整型常量和变量的具体表示方法。
1.整型常量
整型常量即整常数。Java中的整常数,由一个或多个数字组成,可以带正负号。根据进制的不同,又可分为十进制数、八进制数和十六进制数,分别用下面的形式表示:
q 十进制整数。是以10为基数用0~9这个10个数字和正、负号组成。但是十进制整数有能以0开头,避免和下面所讲的八进制突冲。例如123、-456、0等。
q 八进制整数。是以8为基数用0~7这个8个数字和正、负号组成。以0开头的都是八进制数。如0123,0565,-0456等
q 十六进制数。是以16为基数用0~9这个10个数字、字母A~F(对大小写不敏感,代表了10~15)和正、负号组成。以0X或0x开头的都是十六进制数。如0x23,0X23,-0x12e,-0X12E等
默认情况下,整型常数存储为int类型(32位占4个字节)。若想使用更大的数,这时就会使用长整型常量(64位占8个字节),也就是将一个整型常量强制变成长整型常量,解决的方法很简单就是在整型常数后面跟字母l或L就表示该数是长整型常量。如4987L和0X4987L。由于小写的字母l容易和数字1混淆,所以建议读者使用时用大写的L。
2.整型变量
整型变量按照占用的内存空间不同,可以分成4种:字节型、短整型、基本型和长整型,分别用byte、short、int和long这四种关键字来声明。表4.2列出了整型数据的位数及表示范围。
表4.2 整型数据的位数及表示范围
数据类型 |
所占位数 |
值范围 |
byte(字节型) |
8位 |
-128~127 |
Short(短整型) |
16位 |
-32 768~32 767 |
int(整型) |
32位 |
-2 147 483 648~2 147 483 647(-231~231-1) |
long(长整型) |
64位 |
-9 223 372 036 854 775 808~9 223 372 036 854 775 807(-263~263-1) |
q 字节型(byte)是取值范围最小的整数类型。byte类型适用于表示网络和文件的字节流。byte的定义格式如下:
byte a; //定义byte变量
byte b =055; //定交byte变量并进行初始化
q 短整型(short)是Java中很少用到的一种类型,它的定义格式如下:
short a; //定义short变量
short b =055; //定交short变量并进行初始化
q 整型(int)是Java中最常用的整数类型。在进行带有byte、short和int三种类型并存的表达式时,系统都会将byte、short提升为int类型。它的定义格式如下:
int a; //定义int变量
int b =100; //定交int变量并进行初始化
q 长整型(long)是整型数据中范围最大的,例如:用毫克来表示吨的时候,int数据就会失去精度,超出了它的表示范围。这时候就可以使用long,它的定义格式如下:
long a; //定义long变量
long b =10010000; //定交long变量并进行初始
实型数据
4.2.1 实型变量与常量
实数类型也称为浮点类型,就是Java中的小数表示方法。在Java中有两种浮点类型:单精度浮点型和双精度浮点型。实型数据常用十进制表不,通常将实数应用于精确到小数的计算中,如果在代码中不指定是哪种浮点类型,系统默认为是双精度浮点型。
1.浮点数常量
浮点型常量有两种形式。
q 标准形式:普通的十进制数形式。它由数字和小数点组成。而且必须为小数点。例如:0.568、568.0、.568、568.、0.0都是合法的实数常量。
q 科学记数法形式:指数形式,是指数字中带e或E(表示的是以10为底)的组成形式。例如2.8E5表示2.8×105;3.6E-10表示3.6×10-10。其中E(也可以是小写的e)之前必须有数字,且E后面的指数必须是整数。如E3、2E1.7都不是合法的指数形式。Java还规定,浮点常量默认为双精度数,如果需要指定为单精度数,需要在末尾加上F或f。比如23.6F、158E2f。
2.浮点数变量
浮点型变量分为单精度和双精度两类,分别用float和double来声明。表4.3列出了实型数据的位数及表示范围。
表4.3 实型数据的位数及表示范围。
数据类型 |
所占位数 |
值范围 |
Float(单精度浮点型) |
32位 |
绝对值约1.4E-45~3.4E38 |
double(双精度浮点型) |
64位 |
绝对值约4.9E-324~1.8E308 |
q 单精度浮点型(float)专指占用32位存储空间的单精度数据类型。占存储空间少,具有较快的运算速度。在编程中,对小数部分的精度要求不高时,一般使用单精度浮点型。但是在小数位比较多或对小数的精确度比较高的时候会发生精度缺失的现象,这时我们就只能釆用系统默认的双精度浮点数。它的定义格式如下所示:
float f; //定义float变量
float f = 1.1f; //定义float变量并为其进行初媁化
q 双精度浮点型(double)占用64位存储空间,有15~16个有效位,超过会自动做四舍五入处理的部分。由于双精度浮点型能保证数值的精准性所以无论是在现在数学计算中还是生活中,都占有很大比重,无时无刻不在用它。它的定义格式如下所示:
double d; //定义double变量
double d = 3.1415926535897932384; //定义double变量并为其进行初媁化
【代码剖析】
这是一个关于浮点数有效小数位的实例,具体代码如下所示:
public class Real {
public static void main(String[] args) {
float f = 58635.1235F; // 定义一个单精度数并赋值
double d = 15210.2300356985412023689; // 定义一个双精度数并赋值
System.out.println("The result of 单精度变量 is " + f);
System.out.println("The result of双精度变量 is " + d);
}
}
运行结果如下所示:
The result of 单精度变量 is 58635.125
The result of双精度变量 is 15210.230035698542
【解释说明】
从运行结果中可以看出,float后面的小数位明显减少了,这是因为有效位在做怪,Java中规定了float类型的十进制的有效位为7位(指的是整数位的数字个数+小数位的数字个数=7),多余位四舍五入。double类型的十进制的有效位为16位(指的是整数位的数字个数+小数位的数字个数=16),多余位四舍五入。但是在上面的运行结果中变量f却是一个有效位是8,别忘了还有一个四舍五入的进位,加在一起就共有8位了,double同理。
字符型数据
字符类型(char)是指存储字符的数据类型。Java中的char类型是16位,其取值范围是0~65535,没有负数的char。
4.3.1字符型数据的使用
字符型数据是由一对单引号‘’括起来的单个字符。在Java中使用Unicode格式的16位字符集代表字符。Unicode所定义的国际化字符集能表示至今为止人类语言的所有字符集。字符型变量的定义格式如下所示:
char c; //指定变量c为char型
char c='a'; //指定变量c为char型,且赋初值为'a'
在Java中也提供了一种以反斜杠(\)开头的字符称为转义字符,其作用是表示某些非图形字符。
也可以用十六进制记数法(用一个反斜杠和u(\u)后面跟着4位十六进制数字组成)表示。转义字符如下表4.4所示。
表4.4 转义字符表
转义字符 |
描述 |
十六进制记数法 |
\ddd |
八进制字符(ddd) |
|
\uxxxx |
十六进制Unicode字符(xxxx) |
|
\’ |
单引号字符 |
\u0027 |
\’’ |
双引号字符 |
\u0022 |
\\ |
反斜杠 |
\u005C |
\r |
回车 |
\u000D |
\n |
换行 |
\u000A |
\f |
走纸换页 |
\u000C |
\t |
横向跳格 |
\u0009 |
\b |
退格 |
\u0008 |
【代码剖析】
下面我们就举一个简单的例子来说明普通字符和转义字符的使用方法,具体代码如下所示:
public class CharClass {
public static void main(String[] args) {
char c1 = '\u0008'; //定义的Unicode字符
char c2 = '\u0394'; //定义的Unicode字符
char c3 = '\uffff'; //定义的Unicode字符
char c4 = 'n'; //定义的普通字符
char c5 = 'a'; //定义的普通字符
char c6 = 'm'; //定义的普通字符
char c7 = 'e'; //定义的普通字符
System.out.println("c1= "+c1);
System.out.println("c2= "+c2);
System.out.println("c3= "+c3);
System.out.println("c4~c7连起来是: "+c4+c5+c6+c7);
System.out.print("转义字符的使用:\n"+"ab\\dc\"fd\n你好"); //转义字符的使用
}
}
运行结果如下所示:
c1= _
c2= Δ
c3= ?
c4~c7连起来是: name
转义字符的使用:
ab\dc"fd
你好
布尔型数据
布尔型数据只有两个值:true和false。表示了“真”和“假”这两种状态。其实,对于布尔型数据的理解非常简单,根据程序中所提出的条件,布尔型只需回答“是”或“不是”,然后程序会根据不同答案去做不同的事情。例如:“你去游泳吗?”这相当于是一个条件,“去”就相当于是一个布尔型数据,当然了在程序中它是以“true”的形式返回的,那么程序就会根据“true”这个答案去做相应的事情比如买泳票购泳衣等。
4.4.1布尔型数据的使用
布尔类型是最简单的一种数据类型。布尔型变量要用关键字boolean来定义,关系运算符和逻辑运算符返回的值就是布尔类型的,在for,while,if~else中会经常用到它,因此不要看它很简单,其实它也很重要。它的定义格式如下:
boolean b; //指定变量b为boolean型'
boolean b=true; //指定变量b为boolean型,且赋初值为true
【代码剖析】这是一个关于布尔型数据使用的实例,具体代码如下:
public class CharClass_1{
public static void main(String[] args){
int a=0;
boolean b;
if(++a){
System.out.println("Hello!");
}
if(b){
System.out.println("World");
}
}
}
【解释说明】从上面的运行结果中,我们可以看出代码中是有问题的,那么到底是哪里出现问题了呢?if(++a)在这里++a返回的不是true或false,而是1,布尔型是一个独立的类型,它不像C语言中的布尔型可以代表0和1,在Java中,布尔类型是不能转化成int型的。由于这个原因,所以程序就出错了。