3.2 数据类型

Java语言是一个强调数据类型的语言,在声明任何变量时,必须将该变量定义为一种数据类型。Java中的数据类型包括基本数据类型和对象类型(也称为引用数据类型)。对象类型不属于本章所讲述的内容,本章主要介绍数据的基本类型。Java程序中,总共有8大基本类型:其中包括4种整型、1种字符型、2种浮点型、1种布尔型。除了这几种基本类型外,其他都属于对象类型的数据。

3.2.1 整型

什么是整型呢?从字面上就可以知道,整型就是整数类型,也就是没有小数点的数字,可以是正数也可以是负数。在Java中,整型主要有4种:字节型(byte)、整数型(int)、短整型(short)、长整型(long)。

1.字节型

【实例3-1】byte用一个字节来表示整数值,它的范围介于-128~127之间。通常这种类型的整型数据拥有上节中提到的所有进制。但无论采用哪种进制,在输出控制台上,系统都会将其自动转化为十进制,从下列代码段可以得到证实。

01        public class Byte {                                                        //定义一个Byte类
02                public static void main(String[] args) {                           //主方法
03                        byte x = 22;                                               //x是十进制数
04                        byte y = 022;                                              //y是八进制数
05                        byte z = 0x22;                                             //z是十六进制数
06                        //输出相应十进制的值
07                        System.out.println("转化成十进制,x=" + x);
08                        System.out.println("转化成十进制,y=" + y);
09                        System.out.println("转化成十进制,z=" + z);
10                }
11        }

【代码说明】第3~5行定义了3个byte型变量,分别代表不同的数制,第4行的变量值前缀是0,第5行的变量值前缀是0x。第7~9行并没有使用类型转换的函数,而是直接输出这3个变量。

【运行效果】在DOS窗口中,通过Javac编译该源代码,然后通过Java执行编译后的class文件。最终结果如下所示。

转化成十进制,x=22
转化成十进制,y=18
转化成十进制,z=34

2.短整型

【实例3-2】short用两个字节表示整数值,其整数值介于-32768~32767之间。它有八进制、十进制和十六进制3种表示方法,其表示方法与字节型是一样的,从下面的程序段可以证实。

01        public class Short                                                       //定义一个Short类
02        {
03            public static void main(String[] args)                               //主方法
04            {
05                short  x=22;                                                     //十进制
06                short  y=022;                                                    //八进制
07                short  z=0x22;                                                   //十六进制 
08                //输出相应十进制的值
09                System.out.println("转化成十进制,x="+ x);
10                System.out.println("转化成十进制,y="+ y);
11                System.out.println("转化成十进制,z="+ z);
12            }
13        }

【代码说明】第5~7行定义了3个short型变量,依然是用前缀0和0x代表八进制和十六进制。第9~11行没有使用数据类型转换的函数,直接输出结果。

【运行效果】

转化成十进制,x=22
转化成十进制,y=18
转化成十进制,z=34

可以看出,两个程序段运行结果都是一样的。其实,在实际编程过程中,开发者最常用的整型是int型。

3.整数型

【实例3-3】整数型又称作int型,用4个字节来表示整数值,其整数值介于-2147483648~2147483647之间。整数型拥有以上所说的各种进制,其表示方法与字节型也相同,从下面的程序段同样可以证实。

01        public class Int                                                //定义一个Int类
02        {
03            public static void main(String[] args)                      //主方法
04            {
05                int  x=22;                                              //十进制
06                int  y=022;                                             //八进制
07                int  z=0x22;                                            //十六进制
08                //输出相应十进制的值
09                System.out.println("转化成十进制,x="+ x);
10                System.out.println("转化成十进制,y="+ y);
11                System.out.println("转化成十进制,z="+ z);
12            }
13        }

【代码说明】第5~7行同样定义了3种进制的变量,通过前缀0和0x来区别进制。第9~11行依然是直接输出变量的值,而没有显式地进行类型转换。

【运行效果】

转化成十进制,x=22
转化成十进制,y=18
转化成十进制,z=34

4.长整型

【实例3-4】长整型long用8个字节表示整数型,其数值介于-9223372036854775808~9223372036854775807之间。它的所有特性基本与前几种整型一样,唯一不同的是,长整型的数据后面有一个“L”字母,这个也是从表现形式上区别于其他整型的最大特征。可从下面的程序代码段中了解长整型与其他整型的区别。

01        public class Long                                                   //定义一个Long类
02        {
03            public static void main(String[] args)                          //主方法
04            {
05                long  x=22L;                                                //十进制
06                long  y=022L;                                               //八进制
07                long  z=0x22L;                                              //十六进制
08                //输出相应十进制的值
09                System.out.println("转化成十进制,x="+ x);
10                System.out.println("转化成十进制,y="+ y);
11                System.out.println("转化成十进制,z="+ z);
12            }
13        }

【代码说明】第5~7行定义了3个长整型变量,要注意的是结尾的标识“L”。第9~11行直接输出变量的值,会自动进行类型转换,输出的结果都是用十进制表示的。

【运行效果】

转化成十进制,x=22
转化成十进制,y=18
转化成十进制,z=34

从以上程序代码段中可以看出,4种不同的整型类型的数据,在程序段中所表现出来的运行结果几乎是一样的。不同的是每个类型数据的取值范围不一样,随着字节数增多,取值范围增大。虽然长整型的数据可以表示很大的数据,但如果超过了长整型的数据取值范围,该如何处理这些数据呢?在Java中,有一种大数值类型的数据,由于它属于对象类型数据,所以此处不做介绍。

3.2.2 字符型

字符型数据是平时程序设计中使用比较频繁的类型,其占两个字节。特别注意的是,它必须以单引号表示,例如'A'表示一个字符,这个字符就是A。"A"表示一个字符串,虽然只有一个字符,但因为使用双引号,所以它仍然表示字符串,而不是字符。

总之,字符数据类型只能表示单个字符,任何超过一个字符的内容,都不能被声明为字符型。字符的声明是用单引号,通过输出控制台,看到的是单引号内的字符数据。

【实例3-5】通过下面的程序代码,来看看字符型数据是如何输出的。

01        //声明了x,y,z,a四个字符型数据变量
02        public class Char                                                 //定义一个Long类
03        {
04            public static void main(String[] args)                        //主方法
05            {
06                char x='美';                                              //声明一个字符型变量
07                char y='国';                                              //声明一个字符型变量
08                char z='人';                                               //声明一个字符型变量
09                char a='民';                                              //声明一个字符型变量
10                System.out.println("这些字符组合起来就是:"+x+y+z+a);      //输出连接起来的字符
11            }
12        }

【代码说明】第6~9行定义了4个字符型变量,第10行输出变量的内容,将字符型数据连接在一起使用的运算符也是“+”。

【运行效果】

这些字符组合起来就是:美国人民

字符型数据和整型数据都是无小数点的数据,下面将要讲述的类型则是带小数点的数据,用专业术语来讲就是浮点型。

3.2.3 浮点型

浮点型数据表示有小数部分的数字,总共有两种类型:单精度浮点型(float)和双精度浮点型(double)。

1.单精度浮点型

单精度浮点型占4个字节,有效数字最长为7位,有效数字长度包括了整数部分和小数部分。一个单精度浮点型的数据定义如下所示。

float x=223.56F

注意 在每个单精度浮点型数据后面,都有一个标志性符号“F”或者“f”,有这个标志就代表是单精度浮点型数据。

【实例3-6】下面演示单精度浮点型数据在程序代码段中的使用情况。

01        //声明了x,y,z三个浮点型变量
02        public class Float                                                  //定义一个Float类
03        {
04            public static void main(String[] args)                          //主方法
05            {
06                float x=22.2f;                                              //声明一个单精度类型变量
07                float y=42.2f;                                              //声明一个单精度类型变量
08                float z=x*y;                                                //实现相乘
09                System.out.println("x*y="+z);
10            }
11        }

【代码说明】第6~7行定义了两个浮点型数据,它们都以“f”标识结尾。第8行定义了变量z,其值是前面定义的变量x和y的乘积。第9行输出计算结果z。

【运行效果】

x*y=936.84

提示 如果在一个浮点数后面加上“F”或者“f”时,表示的就是单精度浮点型数据,否则,系统会认为是双精度浮点型数据。

2.双精度浮点型

双精度浮点型数据占据8个字节,有效数字最长为15位,后面带有标志性符号“D”或“d”。系统默认不带标志性符号的浮点型数据是双精度浮点型数据。双精度浮点型数据的定义如下所示。

double x=33.5D

【实例3-7】下面是一个简单的程序代码段。

01        public class Double                                         //定义一个Double类
02        {
03            public static void main(String[] args)                  //主方法
04            {
05                float x=23f;                                        //声明一个单精度类型变量
06                double y=44;                                        //声明一个双精度类型变量
07                //输出x和y的值
08                System.out.println("x="+x);
09                System.out.println("y="+y);
10            }
11        }

【代码说明】第5行定义了一个单精度浮点型变量x,但没有带小数位。第6行定义了一个双精度浮点型变量y,也没有带小数位,也没有加标识“D”。第8~9行分别在控制台输出两个变量,注意输出的结果。

【运行效果】

x=23.0
y=44.0

从这段程序代码中可以看出,即使浮点型数据是一个只有整数位没有小数位的数据,在输出控制台上,其仍然是带小数点的浮点数据,系统会自动加上小数点,并且小数位全部置0。

3.2.4 布尔型

布尔型数据其实很简单,例如,如果有人问:去不去麦当劳?可以说“不去”。如果有人问:去不去看电影?可以说“去”。这里就隐藏着布尔型数据,布尔型数据就是“是”与“否”。在程序中使用“真”和“假”来代替“是”与“否”,即“true”和“false”。布尔类型的默认值是false,即如果定义了一个布尔变量但没有赋初值,默认该布尔变量值是false。

【实例3-8】仔细观察下面的程序代码。

01        public class Boolean {                                                 //定义一个Boolean类
02                public static void main(String[] args) {                 //主方法
03                        int a = 30;                                              //声明一个整型变量a
04                        int b = 59;                                              //声明一个整型变量b
05                        boolean x, y, z;                                         //声明三个布尔型变量x、y、z
06                        x = (a > b);                                         //为变量x赋值
07                        y = (a < b);                                          //为变量y赋值
08                        z = ((a + b) == 50);                                   //为变量z赋值
09                        //输出x、y和z的值
10                        System.out.println("x=" + x);
11                        System.out.println("y=" + y);
12                        System.out.println("z=" + z);
13                }
14        }

【代码说明】

当执行第6行代码“a>b”时,不等式不成立,所以x的结果是假。

当执行第7行代码“a<b”时,不等式成立,所以y的结果是真。

当执行第8行代码“a+b==50”时,结果不成立,所以z的结果是假。

说明 布尔型数据在只有两种选择,不可能出现第三种选择的情况下使用。

【运行效果】

x=false
y=true
z=false

在程序设计的过程中,如果一个参数只有正和反两方面,就可以将其设置为布尔型类型。