Java编程指南:基础知识、类库应用及案例设计
上QQ阅读APP看书,第一时间看更新

1.4 Java基本数据类型

在Java语言体系中,有3种数据类型,即基本数据类型(整型、浮点型、字符型、布尔型等)、数组数据类型(整型、浮点型、字符型、布尔型等)和复合数据类型(类),它们都是用于声明变量和常量的。

基本数据类型声明的变量被称为“变量”,数组数据类型声明的变量被称为“数组变量”,复合数据类型声明的变量被称为“类变量”。

基本数据类型有boolean(布尔数)、char(单字符)、byte(字节数)、short(短整数)、int(整数)、long(长整数)、float(单精度浮点数)、double(双精度浮点数)和void(无类型),Java语言规定的基本数据类型的关键字、所占用计算机存储器的字节数、类型数值取值范围的最小值和最大值如表1-1所示。

表1-1 基本数据类型

确切地说,Java语言体系只有8种用于声明(定义)变量的基本数据类型,即boolean、char、byte、short、int、long、float和double。

1.4.1 数据值的表示法

在Java语言体系中,对于基本数据类型的数据取值规定了一些数据值的表示方式,例如,十进制数、十六进制数、浮点数、布尔数、字符数等的表示方式,每种数据都有确切的表示方式,在编写Java程序时应按照Java规定的数据形式为基本数据类型定义的变量赋值。

1. 整数表示法

整数有十进制数、八进制数、十六进制数。十进制整数形式是由0~9的一系列数字组成,但是第一个数字不能是0,例如123;八进制整数是以0开头的,后由0~7的一系列数字组成,例如0456;十六进制数形式是由0x或0X开始,后面由0~9数字和a~f小写或A~F大写字母组成的一串数据,例如0x123、0xABC等。它们可以为byte、short、int、long等类型定义的变量赋值,当为long类型定义的变量赋值时,应该使用长整数表示方式,该表示方式为在数据后加L或l字母,例如,123456789L,L或l字母表示该数据是一个长整数类型,占用8字节的计算机存储器。

2. 浮点数表示法

浮点数有两种表示形式:十进制数和科学记数法。科学计数法遵循IEEE 754标准,它是32位float和64位double表示法的二进制标准。

十进制数形式是由数字和小数点组成,例如123.456;科学计数法形式是由数字后跟字母e或E表示指数,例如2.13e2。浮点数是为float、double等类型定义的变量赋值的,当为float类型定义的变量赋值时,在浮点数后加f或F字母,例如2.13e2F;当为double类型定义的变量赋值时,在浮点数后加d或D字母,例如2.13e2D。

另外,在Java体系中,浮点数值的表示除了基本数据类型允许的标准数值范围的数据外,还有一些用于表示浮点数的特殊值,例如Infinity(无穷大)、-Infinity(负无穷大)、-0.0和NaN(非数字值)等。

3. 布尔数表示法

布尔数只有两个值:true(真)和false(假)。true和false是Java的关键字,是专门为boolean类型定义的变量赋值的,true和false不对应于任何形式的数值。

4. 字符数表示法

字符数值是用单引号括起来的一个字符,在Java语言体系的基本数据类型中,字符数值是由Unicode(泛代码)字符集表示的,即它是用一个16位无符号型数据表示的,最多可以表示65536个字符,字符数值是为char类型定义的变量赋值的,例如‘a’。

另外,Java语言体系还提供转义字符,顾名思义,“转义”是指改变原有字符的含义,转义字符的定义是以反斜杠(\)开头,其后跟具有另外含义的字符,例如“\r”,该字符值的含义是“回车”,即回车值(对应键盘的回车键)用字符“\r”表示。表1-2列举了一些转义字符以及字符值的含义。

表1-2 转义字符

5. null值

在Java语言体系中,关键字null(空)代表一个特殊的数值,它可以赋值给除基本数据类型外的其他类型的变量,当一个变量无用时,可将它赋予null值,表示释放该变量占用的计算机存储单元,即该变量将从计算机内存中消失。

1.4.2 变量

在Java语言体系中,变量是Java程序中创建的基本存储单元,其定义包括变量名、变量类型和作用域几个部分。

变量名是一个合法的自定义标识符,以英文大写字母A~Z或小写字母a~z或“_”或$开头的字符串序列,变量名区分英文的大小写,变量名不能使用Java保留字,变量名应具有一定含义,以增加程序的可读性。

变量类型决定了变量可能的取值范围以及对变量允许的操作,与变量类型不匹配的操作可能会导致程序出错。变量类型可以是基本数据类型,也可以是其他数据类型。

变量的作用域指明可访问该变量的一段代码,声明一个变量的同时也就指明了变量的作用域,按作用域划分,变量可以有全类有效变量、局部变量、方法参数变量、例外(异常)处理参数变量等几种。全类有效变量在类中声明,而不是在类的某个方法中声明,它的作用域是整个类;局部变量在方法或方法的一块代码中声明,它的作用域为它所在的代码块,即整个方法或方法中的某块代码;方法参数变量是传递给方法的,它的作用域就是该方法。在一个确定的域中,变量名应该是唯一的。通常,变量作用域是用大括号{}划定的。

通用的声明变量的语法格式为:

应用基本数据类型声明变量的语法格式为:

声明相同类型的多个变量时,变量名之间应用逗号隔开。对于全类或局部有效的基本数据类型的变量可以赋予初值,而方法参数和例外处理参数的变量值由调用者给出。

1. 整型变量

在基本数据类型中有4个是用于声明整型变量的,即byte、short、int和long。

【示例1-7】 声明在整个类中有效的整型变量,作用域为整个类,即在整个类中都可以对变量进行操作。

【示例1-8】 在main()方法中声明的整型变量,并为变量赋予初始值,变量的作用域为main()方法的{}中,在main()方法中可以对变量进行操作,在其他地方不能对变量进行操作。

2. 浮点型变量

在基本数据类型中,浮点型变量的类型有float和double两种.

【示例1-9】 定义浮点型变量并为其赋予初始值.

3. 布尔型变量

在基本数据类型中,布尔型变量的类型为boolean,布尔型变量只有两个取值:ture和false。true和false关键字只能赋给布尔类型的变量。

【示例1-10】 定义布尔型变量并为其赋予初始值。

4. 字符型变量

在基本数据类型中,字符型变量的类型为char,其声明的变量为双字节变量,赋值范围为0~65535,char类型的变量可以使用字符数值为其赋值,也可以使用0~65535的整数数值为其赋值,即字符型变量还可以当作双字节无符号整数变量使用。

【示例1-11】 定义字符型变量并为其赋予初始值。

5. 基本数据类型变量的默认值

在Java语言体系中,当声明一个变量为基本数据类型,但没有给变量赋予初始值时,Java系统会为变量赋予默认的初始值。表1-3是每种变量默认的初始值。

表1-3 变量默认的初始值

6. 基本数据类型变量的应用

【示例1-12】 应用基本数据类型声明变量,并为变量赋予初始值,然后,通过计算机屏幕显示出变量的数值。

1.4.3 变量的数据类型转换

Java支持两种不同类型的变量内数据之间的类型转换,即一个类型的数据可以转换成另一种类型,但条件是两种类型是兼容的,例如整型、浮点型、字符型声明的变量之间是兼容的,但它们与布尔型变量是不兼容的。类型转换有两种方式:一种是自动类型转换;另一种是强制类型转换。

1. 自动类型转换

自动类型转换发生在基本数据类型变量之间的赋值、混合运算等操作中,例如,整型、浮点型、字符型等变量之间的混合运算。在运算中,不同类型的数据需要先转化为同一类型,然后再进行运算,类型的转换是自动的。自动类型转换的原则是从在计算机中占内存位(bit)数少的类型向占位数多的类型方向进行转换,其各种基本数据类型自动转换的规则为:

其中,箭头(→)左边表示参与运算的几个基本数据类型,operator为运算符(如加、减、乘、除等于等),右边表示转换后进行运算的基本数据类型,例如,一个int类型的变量与一个long类型的变量做相加运算,首先将int类型变量内的数据转换为long类型的数据,然后再做加运算;char变量与int变量做运算时,先将char类型变量内的数据转换为int类型的数据,然后再做运算。

2. 强制类型转换

强制类型转换与自动类型转换的转换方向是相反的,即强制类型转换是指从在计算机中占内存位(bit)数多的类型向占位数少的类型方向进行转换。例如,由int类型变量的数据转换成byte类型的数据。强制类型转换需要使用Java语言体系提供的转换语句,其转换的语法格式为:

【示例1-13】 在基本数据类型变量之间进行数据类型转换的程序。

强制类型转换因数据所占计算机内存位数的减少,因此可能会造成高位数据的丢失,另外,在Java语言体系中,boolean类型的变量数据是不能强制转换为其他基本数据类型的,boolean类型变量的当前值只能转换为一个字符串,例如,true或false字符串。

在Java编程中,一般是限制使用强制转换运算符的,防止出现数据丢失等隐形错误。强制转换可以用在除boolean类型外的基本数据类型之间,以及有继承关系的复合数据类型,不能用在不相关的复合数据类型之间,以及基本数据类型和复合数据类型之间。

1.4.4 常量

在Java语言体系中,常量定义是“不变的变量”,或是“具有最终值的变量”。当用Java关键字final(最终的)修饰声明的变量,同时又为变量赋予确切的数值时,该变量即被声明为常量。另外,常量的标识符一般由大写字母组合而成。

【示例1-14】 声明常量的Java源程序代码。