Java程序设计案例教程
上QQ阅读APP看书,第一时间看更新

2.2 数据类型

现实生活中的数据有不同类型之分,如在计算职工工资时,职工人数为整数,职工姓名为字符串,职工工资为浮点数等。

2.2.1 数据类型的划分

Java语言中的数据类型分为基本数据类型和引用数据类型。基本数据类型共有8种,包括4种整数类型(byte、short、int和long)、两种实数(浮点数)类型、字符类型(char)和布尔类型(boolean)。引用数据类型包括字符串(String)、类(class)、接口(interface)、数组等,其中字符串类型兼具某些基本数据类型的特征。另外,也有文献把空类型(void)看作是一种数据类型。Java数据类型如图2-1所示。

2.2.2 基本数据类型

978-7-111-60245-3-Chapter02-4.jpg

图2-1 Java数据类型

在栈中可以直接分配内存的是基本数据类型。

1.整型

整型是那些没有小数部分的数据类型。Java中提供字节型(byte)、短整型(short)、整型(int)和长整型(long)4种整数类型,这些整数类型都有正负数之分。每种整型占用的二进制位数和取值范围见表2-2。

2-2 整数类型的取值范围

978-7-111-60245-3-Chapter02-5.jpg

int类型是最常用的整数类型,它表示的数据范围已经足够大了,基本能满足现实生活的需要。如果需要表示更大的整数,这时就要用long。由于Java中的整型默认为int型,在表示长整型时需要在数值后面加写字母L或其对应的小写字母l,这时形如8L及-10l的整数占用64位存储空间。鉴于字母l与数字1非常容易混淆,强烈推荐使用L。

除了日常生活中使用的十进制表示形式外,Java中的整数常量也可以采用八进制或十六进制表示形式。八进制整数常量以0为前缀,使用数字0~7表示,如065为八进制形式的整数常量,等价于十进制中的53。十六进制数用0~9及A~F(a~f)表示,并以0x或0X为前缀,如0xa02F为十六进制的整数常量。

2.浮点类型

浮点类型是带有小数部分的数据类型,也称实型。Java中有单精度float和双精度double两种类型的浮点数,每种类型占用的二进制位数和取值范围见表2-3。

2-3 浮点类型的取值范围

978-7-111-60245-3-Chapter02-6.jpg

最常用的浮点类型是double,如3.14D、2.5d等都是double类型。默认情况下,可以省略其后缀D或d。若要指定float类型的数据,则需在浮点数后面加后缀F或f,如3.14F或2.5f为float类型的数据。

3.布尔类型

布尔类型用于表达两个逻辑状态之一的值,也称为逻辑类型。Java中的布尔类型变量是boolean,取值只能为true和false两者之一,分别代表逻辑“真”与逻辑“假”。与C/C++不同的是,Java中的布尔值不能与0、1相互转换。

布尔类型通常被用在流程控制中,作为判断条件。

boolean flag=true;

4.字符类型

字符类型char用于表示单个字符,如字母、数字、标点符号和其他符号。Java使用Unicode字符集,因此char类型的数据均是16位,不管是英文还是中文,都占用两个字节的内存空间。字符类型常量用一对单引号括起来,比如'K'、'a'、'3'、'你'等。也可以使用Unicode编码来表示字符值,用\u开头的4个十六进制数表示,如'\u0041'表示'A'。

Java中有以反斜杠(\)开头的字符,反斜杠将其后面的字符转变为另外的含义,称为转义字符。Java中常用的转义字符如表2-4所示。

2-4 Java中常用的转义字符

978-7-111-60245-3-Chapter02-7.jpg

5.字符串类型

字符串类型是程序设计中的常用类型,虽然字符串不是Java语言的基本数据类型,但它具有许多基本数据类型的特征,比如可以声明字符串变量,对字符串变量直接赋值等,因此在本节中作简单介绍。

字符串是包含在""中的字符序列,序列中字符的个数称为字符串的长度,长度为0的字符串为空串。以下为部分字符串。

"Hello World!"

"欢迎!"

" " //字符串中有一个空格字符,长度为1

"" //空串,长度为0

null //空对象,不指向任何实例

字符串变量的声明格式为:

String变量名;

变量声明后就可以对其赋值:

Strings1="Hello",s2; //声明String型变量s1和s2,同时给s1赋值

s2="World!"; //给s2赋值为"World!"

String s3 = s1+s2 ; // s3为"HelloWorld!"

其中“+”运算将两个字符串连接成一个新的字符串。若其中某个操作数为其他数据类型,则先将其隐式转换成字符串,然后再进行字符串连接运算。例如:

//先将数值800转化为字符串"800",再进行连接运算

System.out.println("职工津贴为每月"+800+"元");

6.数据类型转换

整型、字符型、浮点型数据可以混合运算。不同优先级类型的数据需要先转换为同一类型,再进行运算。Java中类型的优先级由低级到高级分别为(byte,short,char)→long→float→double。

(1)自动类型转换

当出现混合运算时,类型转换的一般原则是低优先级(位数少)的类型转换为高优先级(位数多)的类型,称作自动(隐式)类型转换。当某种类型的值赋给另一种类型的变量时,如果这两种类型是兼容的,就可以将低优先级类型的值赋给高优先级类型的变量。例如当int型值可以赋给long型的变量时,Java自动执行转换。如下面的语句可以在Java编译器中直接通过:

byte a = 10; //定义字节型变量a

int i=a;

float f=a;

(2)强制类型转换

若将高优先级的值赋给低优先级的变量,如将long型值赋给int型变量,则可能造成信息的丢失,这时Java不能执行自动转换,编译器需要程序员通过强制(显式)类型转换的方式确定这种转换。强制类型转换的一般形式为:

(type)expresstion

例如:

978-7-111-60245-3-Chapter02-8.jpg

978-7-111-60245-3-Chapter02-9.jpg