基本数据类型是Java语言中预定义的、长度固定的、不能再分的类型,数据类型的字被当作关键字保留。与其他大多数程序设计语言不同的是,由于Java程序跨平台运行,因此Java的数据类型不依赖于具体的计算机系统。
对于常量和变量的概念,可以这样理解:计算机在处理数据时,必须将其装入内存,按照不同的数据类型分配不同的存储空间,借助于对内存单元的命名来访问这些数据。被命名的内存单元就是常量和变量。
数据类型指的是一组性质相同的值的集合以及定义于这个值集合上的一组操作的总称。Java中的数据类型可分为两大类,一类称为基本数据类型(或叫简单数据类型),另一类称为复合数据类型(或叫构造数据类型)。基本数据类型是Java语言本身定义的数据类型,如整数、浮点数、布尔及字符等较常用的简单数据类型;复合数据类型是指那些由用户根据需要自己定义并实现其运算的较复杂的数据类型,如接口和数组等。
Java的简单数据类型包括字符型、整型、实型和布尔型,如表2-1所示。
表2-1 Java的数据类型
数据类型 |
占用内存空间 |
数据范围 |
默认值 |
说 明 |
char |
16位 |
\u0000'~\uFFF' |
\u0000' |
字符型 |
boolean |
8位 |
true或false |
false |
布尔型 |
byte |
8位 |
-128~127 |
0 |
整型 |
short |
16位 |
-32768~32767 |
0 | |
int |
32位 |
-2 147 483 648~2 147 483 647 |
0 | |
long |
64位 |
-9 223 372 036 854 775 808 ~9 223 372 036 854 775 807 |
0 | |
float |
32位 |
-3.4 028 347e+38f~-3.40 282 345e+38) |
0.0f |
实型 |
double |
64位 |
-1.79 769 313 486 231 570e+308 ~1.79 769 313 486 231 570e+308 |
0.0d | |
boolean |
8位 |
true或false |
false |
布尔型 |
(1)字符型常量。
字符型常量就是用两个单引号括起来的一个字符。例如'A'、'a'、'2'、' ',这里'A'与'a'分别表示大写字母A(ASCII码值为65)及小写字母a(ASCII 码值为97),即作为字符数据是要区分大小写的。'2'是字符2(其ASCII 码值是50),而不是整数2。空格也是一个字符。
Java也提供转义字符,除了上述可用“\u”这个符号来标定一个Unicode 字符的代码外,还允许使用换码序列来表示特殊字符,常用的换码序列见表2-2。“\”称为转义符,意思是转变了其后继字符的含义。
表2-2 转义字符
换码序列 |
含 义 |
Unicode值 |
换码序列 |
含 义 |
Unicode值 |
\b |
退格 |
\u0008 |
\" |
双引号 |
\u00022 |
\t |
Tab(制表) |
\u0009 |
\ˊ |
单引号 |
\u00027 |
\n |
换行 |
\u000a |
\\ |
反斜杠 |
\u005c |
\r |
硬回车 |
\u000d |
|
|
|
(2)字符型变量。
字符型变量的数据类型是char,计算机用16位二进制数来表示,其数据范围为0~65535。字符型变量说明如下。
char ch='k'; //说明变量ch 类型是char,并赋以初值'k'
(3)字符串常量。
一个字符串常量是括在两个双引号之间的字符序列。若两个双引号之间没有任何字符,则为空串。例如:
"I love Java! "
"Hello World"
"今天天气好"
两个字符串可以用连接符“+”连接,此时允许分行写,例如:
"This is a bed"+
"That is a pen"
等价于"This is a bed That is a pen"。
(1)整型常量。
Java的整型常量有以下3种表示形式。
· 十进制整数,如123,-456,0。
· 八进制整数,以0开头,例如0123表示十进制数83,-011表示十进制数-9。
· 十六进制整数,以0x或0X开头,例如0x123表示十进制数291,-0X12表示十进制数-18。
整型常量在计算机中占32位内存空间;具有int型的值;对于long型的值,则要在数字后加L或l,例如123L表示一个长整数,它在计算机中占64位内存空间。
(2)整型变量。
整型变量的数据类型有byte(字节型),short(短整型),int(整型),long(长整型)4种。表2-3列出各数据类型所占内存的位数及其表示的数据范围。
表2-3 整型变量
数据类型 |
所占位数 |
数据范围 |
byte |
8 |
(-128)~127 |
short |
16 |
(-32 768)~32 767 |
int |
32 |
(-2 147 483 648)~2 147 483 647 |
long |
64 |
(-9 223 372 036 854 775 808)~9 223 372 036 854 775 807 |
int类型是最常用的一种整数类型,它所表示的数据范围足够大,而且适合于32位和64位处理器;但在大型计算中常会遇到很大的整数,超出int类型所表示的数据范围,这时要使用long类型。
由于不同的计算机对于多字节数据的存储方式不同,可能是从低字节向高字节存储,也可能是从高字节向低字节存储,这样,在分析网络协议或文件格式时,为了解决不同计算机上的字节存储顺序问题,用byte类型来表示数据是合适的。但是在通常情况下,由于其表示的数据范围很小,容易造成溢出,应小心使用。short类型则很少使用,它限制数据的存储为先高字节后低字节,这样在某些计算机中会出错。
(1)实型常量。
Java的实型常量有以下两种表示形式。
· 十进制实数,由数字和小数点组成,且必须有小数点,如0.123,.123,123.,123.0。
· 科学计数法,如123e3或123E3,其中e或E之前必须有数字,且e或E后面的指数必须为整数。
实型常量在计算机中占64位内存空间,具有double型的值;对于float型的值,则要在数字后加f或F,如12.3F,它在计算机中占32位内存空间,且表示精度较低。
(2)实型变量。
实型变量的数据类型有float和double两种,表2-4列出了这两种数据类型所占内存的位数及其表示的数据范围。
表2-4 实型变量
数据类型 |
所占位数 |
数据范围 |
float |
32 |
(-3.4028235e+38f)~3.4028125e+38f |
double |
64 |
(-1.7976931348623157e+308)~1.7976931348623157e+308 |
因为双精度类型double比单精度类型float具有更高的精度和更大的表示范围,所以通常使用前者。
实型变量的说明如下:
float f; //指定变量f为float型
double d; //指定变量d为double型
布尔型变量只有两个值true和false,且它们不对应于任何整数值。在流控制中常用到布尔型。布尔型变量的定义如下。
boolean b=true; //定义b为布尔型变量,且初值为true
(1)自动类型转换。
整型、实型以及字符型数据可以混合运算。在运算中,不同类型的数据先转化为同一类型,然后进行运算。转换从低级到高级。
转换规则如下:
·(byte或short)op int→int。
·(byte或short或int)op long→long。
·(byte或short或int或long)op float→float。
·(byte或short或int或long或float)op double→double。
· char op int→int。
其中,箭头左边表示参与运算的数据类型,op为运算符(如加、减、乘、除等),箭头右边表示转换成的进行运算的数据类型。
(2)强制类型转换。
当要对两种不兼容类型的数据进行转换时,需用到强制类型转换,它的通用格式如下:
(target-type)value
其中,目标类型(target-type)指定了要将指定值(Value)转换成的数据类型。
int i;
byte b=(byte)i; //把int型变量i强制转换为byte型
当不同类型的数据进行转换时,可能会发生截断(Truncation)。例如,当把实型数据赋给整型时,它的小数部分会被舍去。
常量和变量是Java语言中的基本元素。常量一般用于表示一个简单值,而变量则是程序中的基本存储单位。
常量是指在程序运行过程中值不改变的量,是一个简单值的标识符或名字,它直接在Java代码中指定。
字面常量的数值意义如同字面所表示的一样,如整型常量45、-75,实型常量42.7f,字符常量'a',布尔常量true,字符串类型常量"Hello"等。
符号常量是用Java标识符表示的一个常量。符号常量定义的一般格式如下。
<final> <数据类型> <符号常量标识符> [= <常量值>];
例如:
final double PI=3.141593;
final int COUNT=1000;
Java的常量值是用文字串表示的。它区分为不同的类型,如整型常量123,实型常量1.23,字符常量'a',布尔常量true、false,字符串常量"This is a constant string. "。
与C和C++不同,Java不能通过#define命令把一个标识符定义为常量,而是用关键字final来实现,例如:
final double PI=3.14159
变量用来存放指定类型的数据,其值在程序运行过程中是可变的。变量具有变量名、类型、值和作用域等特征。在使用任何变量之前,都必须先对它进行说明。变量的说明形式如下:
<数据类型> <变量标识符1> [=<初值>][,<变量标识符2>,…];
例如:
int abc=30;
double a,b,c;
其中,类型说明了变量能存放什么格式的数据。变量名是用来标识该变量的,存取变量的内容(变量的值)都是通过变量名来实现的。当变量名列表中说明多个变量为同一类型时,变量名之间用逗号分隔。一个变量呈现两种属性:变量名和变量值。变量名代表它在计算机内存放的地址,变量值就是该地址存放的内容。
(1)变量名。
在Java中用标识符来表示变量名。程序员应该为变量取有意义的名称,以利于程序的阅读和理解。变量名中字母大写和小写是有区别的,如abc和ABC表示两个不同的变量名。习惯上,变量名以小写字母开头,若一个变量名由多单词所组成,则第一个单词之后的所有单词都以大写字母开头,以便于理解该变量名。例如,myInt表示一个整型变量。
(2)变量类型。
变量类型定义变量值所属的类型。例如,整数类型的变量只能存放整数,浮点数类型的变量用以存放实数。不同类型的变量使用的内存空间不一样,所以在说明变量时必须说明所要使用的变量是属于哪一种类型的。
(3)变量的作用域。
变量的作用域是指该变量在程序中能被分辨和访问的区域。每一个变量都有其作用域。变量说明的位置及其修饰符就确定了其作用域。一个域在Java程序中用“{”和“}”来定界,它可以是类体、方法体或复合语句。变量在其确定的作用域内不能重名。
按作用域来分,变量可以有局部变量、类变量、方法参数和例外处理参数4种。
· 局部变量:局部变量在方法或方法的一块代码中声明,它的作用域为它所在的代码块(整个方法或方法中的某块代码)。
· 类变量:类变量在类中声明,而不是在类的某个方法中声明,它的作用域是整个类。
· 方法参数:方法参数传递给方法,它的作用域就是这个方法。
· 例外处理参数:例外处理参数传递给例外处理代码,它的作用域就是例外处理部分。
在一个确定的域中,变量名应该是唯一的。通常,一个域用大括号“{}”来划定。
变量的说明格式如下。
type identifier[=value][,identifier[=value],…];
例如:
int a, b, c;
double d1, d2=0.0;
其中,多个变量之间用逗号隔开。d2 = 0.0对实型变量d2赋初值0.0,只有局部变量和类变量是可以这样赋初值的,方法参数和例外处理参数的变量值是由调用者给出的。