Java开发手册
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1 数据类型

Java语言定义了八种基本数据类型,包括短整型(short)、整型(int)、长整型(long)、字节型(byte)、单精度浮点型(float)、双精度浮点型(double)、布尔型(boolean)、字符型(char)。这八种基本数据类型又可以分为以下四组。

· 整型:包括短整型(short)、整型(int)、长整型(long)、字节型(byte)。这些都是有符号的整数值。

· 浮点型:包括单精度浮点型(float)和双精度浮点型(double)。通常是在对小数精度有要求时使用,如数学计算。

· 字符型:只包括字符型(char)。代表数字或字母等字符集的符号。

· 布尔型:只包括布尔型(boolean)。有两种值“真/假”,在逻辑判断时使用。

2.1.1 整型

Java语言一共包含短整型(short)、整型(int)、长整型(long)、字节型(byte)四种整数类型。整数类型可以使用十进制、八进制、十六进制来表示,分别使用关键字short、int、long、byte进行定义。这四个整型变量的长度和值范围如表2.1所示。

表2.1 整型的长度和表示范围

这些整数类型不依赖于操作系统,在任何平台上都有相同的长度和属性。Java语言用十进制、八进制、十六进制表示整型时,采用如下所示的表示方法。

· 8表示十进制数据。

· 088表示八进制,首位以0开始。

· 0xABAC表示十六进制数据,首位以0x开始。

Java语言的整型常量默认为int型。若要声明long型常量,则可以后加“l”或“L”。下面通过一个实际程序说明整型变量的使用。首先在程序中定义多个变量,然后再输出这些变量。程序的编写方法和步骤如下所示。

(1)新建一个文本文档,用记事本程序打开该文档并输入下面的程序。

    1     // 代码实现
    2   public class Sample2_1
    3   {
    4        public static void main(String[] args)
    5        {
    6            //定义一个名为a的整型变量,把值20赋予变量a
    7            int a = 20;
    8            //定义一个名为x的整型变量,把值-10赋予变量x
    9            int x = -10;
    10           //定义一个名为b的长整型变量,把值-100赋予变量b
    11           long b = -100L;
    12           //定义一个名为l的长整型变量,把值50赋予变量l
    13           long l = 50l;
    14           //定义一个名为c的短整型变量,把值50赋予变量c
    15           short c = 50;
    16           //定义一个名为y的短整型变量,把值-1赋予变量y
    17           short y = -1;
    18           //定义一个名为d的字节型变量,把值4赋予变量d
    19           byte d = 4;
    20           //定义一个名为z的字节型变量,把值0赋予变量z
    21           byte z = 0;
    22           //输出这些变量的值
    23           System.out.println("a的值为:" + a);
    24           System.out.println("x的值为:" + x);
    25           System.out.println("b的值为:" + b);
    26           System.out.println("l的值为:" + l);
    27           System.out.println("c的值为:" + c);
    28           System.out.println("y的值为:" + y);
    29           System.out.println("d的值为:" + d);
    30           System.out.println("z的值为:" + z);
    31       }
    32  }

(2)单击“文件”|“保存”命令,保存这个文件。并把文件重命名为Sample2_1.java。

(3)打开命令提示符窗口,然后输入下面的命令并按“Enter”键编译程序。

    javac Sample2_1.java

(4)输入下面的命令,运行这个程序。

    java Sample2_1

(5)程序的运行结果如图2-1所示。

图2-1 Sample2_1的编译运行结果

在定义变量时,要注意长整型的常量一般在后面使用“L”结尾。因为小写的字母“l”跟数字“1”很类似,容易混淆。非法整型变量定义的示例代码如下所示。

    a = 20;

下面的代码里语句结尾应该用英文的“;”而不是中文的“;”。

    long b = -100;

在使用这些整型类型时,一定要注意不可以超过其取值范围;否则,就会产生“溢出”,从而存取到其他不可预料的值。

int型变量的最大值为2147 483647,最小值为−2147 483648。接下来通过例子来说明当把2147 483647再加上1,把−2147 483648减1时会产生“溢出”的情况。程序的编写方法和步骤如下所示。

(1)新建一个文本文档,用记事本程序打开该文档并输入下面的程序。

    1   //  代码实现
    2   public class Sample2_2
    3   {
    4        public static void main(String[] args)
    5        {
    6            //定义一个整型变量i
    7            int i;
    8            //定义一个整型变量k
    9            int k;
    10           //定义一个整型变量a
    11           int a;
    12           //定义一个整型变量d
    13           int d;
    14           //定义整型变量i,把整型变量的最大值2147 483647赋给变量i
    15           i = 2147483647;
    16           //定义整型变量k,把整型变量的最小值−2147 483648赋给变量k
    17           k = -2147483648;
    18           //把变量i的值加1,结果赋给变量a
    19           a = i + 1;
    20           //把变量k的值减1,结果赋给变量d
    21           d = k -1;
    22           //输出变量a的值
    23           System.out.println(a);
    24           //输出变量d的值
    25           System.out.println(d);
    26       }
    27  }

(2)单击“文件”|“保存”命令,保存这个文件。并把文件重命名为Sample2_2.java。

(3)打开命令提示符窗口,然后输入下面的命令并按“Enter”键编译程序。

    javac Sample2_2.java

(4)输入下面的命令,运行这个程序。

    java Sample2_2

(5)程序的运行结果如图2-2所示。

图2-2 Sample2_2的编译运行结果

运行程序得到i+1的结果是−2147 483648,而不是期望得到的2147 483648。k-1的结果是2147 483647,也不是期望得到的−2147 483649。这是因为i+1和k-1的值超出了int型的边界值,发生了“溢出”。

在程序开发中要注意尽量避免这种情况的出现。产生这种错误后,程序能正常编译不报错,但执行结果是不符合要求的,这种错误很难排查。

当整型类型表示不了很大的整数时,就需要用长度为64位的长整型。尤其对于程序中需要计算很大的数值时,长整型就表现得非常有用了。

例如,计算10光年是多少米就需要用到长整型来表示距离。程序的编写方法和步骤如下所示。

(1)新建一个文本文档,用记事本程序打开该文档并输入下面的程序。

    1   //代码实现
    2   public class Sample2_3
    3   {
    4        public static void main(String[] args)
    5        {
    6            //定义一个整型变量表示光速
    7            int lightSpeed;
    8            //定义一个整型变量表示秒数
    9            long seconds;
    10           //定义一个长整型变量表示光传播的距离
    11               long dis;
    12               //光速
    13               lightSpeed = 300000000;
    14               //计算10年的秒数
    15               seconds = 10 * 365 * 24 * 60 * 60;
    16               //计算10光年的距离
    17               dis = lightSpeed * seconds;
    18           System.out.println("十光年大约为"+ dis + "米");
    19       }
    20  }

(2)单击“文件”|“保存”命令,保存这个文件。并把文件重命名为Sample2_3.java。

(3)打开命令提示符窗口,然后输入下面的命令并按“Enter”键编译程序。

    javac Sample2_3.java

(4)输入下面的命令,运行这个程序。

    java Sample2_3

(5)程序的运行结果如图2-3所示。

图2-3 Sample2_3的编译运行结果

运算结果已经超过了int型的最大值2147 483647,需要用长整型来表示。

2.1.2 浮点型

浮点型包括单精度浮点型(float)和双精度浮点型(double)两种类型。浮点型使用关键字float、double声明。浮点型也是平台无关性的,在任何操作系统上都有相同的长度和取值范围,如表2.2所示。

表2.2 浮点型的长度及取值范围

在数字后带有字母F或f(float)、D或d(double),或者一个数字包括小数点或指数部分则该数字为浮点类型。如果某个浮点值没有使用float关键字定义为float类型,则系统默认其类型为double型。

Java浮点类型常量有两种表示形式:十进制数形式和科学计数法形式。其中十进制数形式必须含有小数点,例如2.13、34.0;科学计数法形式,例如3.54e2、2.7E2、514E2。具体例子如下所示。

· 2.56。一个浮点值,系统默认其为double型。

· 5.14E18。使用科学计数法表示浮点数,系统默认其为double型。

· 1.245F。一个float类型的浮点值。

· 1.356E+240D。使用科学计数法表示一个大的double类型浮点数。

接下来通过一个程序来说明浮点型的使用方法。在该程序中,首先定义了一些浮点变量,然后对其进行赋值,输出这些变量的值。程序的编写方法和步骤如下所示。

(1)新建一个文本文档,用记事本程序打开该文档并输入下面的程序。

    1  //代码实现
    2  public class Sample2_4
    3   {
    4        public static void main(String[] args)
    5        {
    6            //定义一个名为a的单精度变量
    7            float a;
    8            //定义一个名为b的单精度变量
    9            float b;
    10           //定义一个名为c的双精度变量
    11           double c;
    12           //定义一个名为d的双精度变量
    13           double d;
    14           //把值20.1赋予变量a
    15           a = 20.1f;
    16           //把值-10.13455赋予变量b
    17           b = -10.13455f;
    18           //把值-100.64656赋予变量c
    19           c = -100.64656;
    20           //把值3.27赋予变量d
    21           d = 3.27;
    22           //输出这些变量的值
    23           System.out.println("a的值为:" + a);
    24           System.out.println("b的值为:" + b);
    25           System.out.println("c的值为:" + c);
    26           System.out.println("d的值为:" + d);
    27       }
    28  }

(2)单击“文件”|“保存”命令,保存这个文件。并把文件重命名为Sample2_4.java。

(3)打开命令提示符窗口,然后输入下面的命令并按“Enter”键编译程序。

    javac Sample2_4.java

(4)输入下面的命令,运行这个程序。

    java Sample2_4

(5)程序的运行结果如图2-4所示。

图2-4 Sample2_4的编译运行结果

定义单精度浮点数时,不能写成类似float a = 20.1这种形式,需要在值后面加上“f”或“F”,因为小数常量默认为double类型。把长度为8位的double型常量赋给一个长度为4位的float变量显然是错误的。在实际的操作中,尤其是数学计算或需要经过多次计算才能得出结果,并且对结果的精度要求比较高的情况下,通常使用双精度型。

例如,计算一个角度为60°、半径为12.15cm扇形的面积。计算的结果就需要使用双精度浮点型来表示。程序的编写方法和步骤如下所示。

(1)新建一个文本文档,用记事本程序打开该文档并输入下面的程序。

    1   //代码实现
    2   public class Sample2_5
    3   {
    4        public static void main(String[] args)
    5        {
    6            //定义一个双精度浮点变量pi,表示圆周率
    7            double pi;
    8            //定义一个双精度浮点变量r,表示半径
    9            double r;
    10           //定义一个双精度浮点变量squ,表示面积
    11           double squ;
    12           //把值3.141593赋给变量pi
    13           pi = 3.141593;
    14           //把值12.15赋给变量r
    15           r = 12.15;
    16           //计算面积,把计算的结果赋给变量squ
    17           squ = pi * r * r * 60/360;
    18           //输出面积
    19           System.out.println(squ);
    20       }
    21  }

(2)单击“文件”|“保存”命令,保存这个文件。并把文件重命名为Sample2_5.java。

(3)打开命令提示符窗口,然后输入下面的命令并按“Enter”键编译程序。

    javac Sample2_5.java

(4)输入下面的命令,运行这个程序。

    java Sample2_5

(5)程序的运行结果如图2-5所示。

图2-5 Sample2_5的编译运行结果

2.1.3 字符型

字符型(char)可表示通常意义上的单个字符。Java字符采用Unicode编码。Unicode是一种字符编码方式,可以跨语言、跨平台进行文本转换。每个字符占两个字节。Java语言里char的表示范围为0~65536,包含了ASCII码(一种字符编码方式,表示范围为0~127)。下面的程序演示了char字符类型的使用。程序的编写方法和步骤如下所示。

(1)新建一个文本文档,用记事本程序打开该文档并输入下面的程序。

    1   // 代码实现
    2   public class Sample2_6
    3   {
    4        public static void main(String[] args)
    5        {
    6            //定义一个字符型变量c1
    7            char c1;
    8            //定义一个字符型变量c2
    9            char c2;
    10           //把值66赋给变量c1
    11           c1 = 66;
    12           //把值'z'赋给变量c2
    13           c2 = 'z';
    14           System.out.println("输出c1和c2:");
    15           System.out.print(c1 + " " + c2);
    16       }
    17   }

(2)单击“文件”|“保存”命令,保存这个文件。并把文件重命名为Sample2_6.java。

(3)打开命令提示符窗口,然后输入下面的命令并按“Enter”键编译程序。

    javac Sample2_6.java

(4)输入下面的命令,运行这个程序。

    java Sample2_6

(5)程序的运行结果如图2-6所示。

图2-6 Sample2_6的编译运行结果

可以看到程序中把值66赋给了c1,输出的时候c1却变成了“B”。这是因为值66在Unicode编码中代表了“B”,需要注意的是大写的字母B和小写的字母b值是不一样的。

因为字符所代表的值都是整数,所以可以对字符进行相加操作。还可以对字符常量进行增量操作。通过运算后就会得出另外的一个字符。示例程序的编写方法和步骤如下所示。

(1)新建一个文本文档,用记事本程序打开该文档并输入下面的程序。

    1   // 代码实现
    2   public class Sample2_7
    3   {
    4        public static void main(String[] args)
    5        {
    6        //定义一个字符型变量c1
    7        char c1;
    8        //把值'm'赋给变量c1
    9        c1 = 'm';
    10       System.out.println("c1的值为:" + c1);
    11       //自增运算,表示把c1+1
    12       c1++;
    13       System.out.println("c1+1后为:" + c1);
    14       }
    15  }

(2)单击“文件”|“保存”命令,保存这个文件。并把文件重命名为Sample2_7.java。

(3)打开命令提示符窗口,然后输入下面的命令并按“Enter”键编译程序。

    javac Sample2_7.java

(4)输入下面的命令,运行这个程序。

    java Sample2_7

(5)程序的运行结果如图2-7所示。

图2-7 Sample2_7的编译运行结果

该程序中字符“m”对应的Unicode编码值为109,加1后就变为110,110对应Unicode编码里的字符为“n”。

2.1.4 布尔型

布尔型是Java里用来表示逻辑值的数据类型。其值只能是真或假这两个值其中的一个。它是所有关系运算的返回类型。示例程序的编写方法和步骤如下所示。

(1)新建一个文本文档,用记事本程序打开该文档并输入下面的程序。

    1   // 代码实现
    2   public class Sample2_8
    3   {
    4        public static void main(String[] args)
    5        {
    6            //定义一个布尔型变量a
    7            boolean a
    8            //定义一个布尔型变量b
    9            boolean b;
    10           //把值true赋给变量a
    11           a = true;
    12           //把值false赋给变量b
    13           b = false;
    14           //输出
    15           System.out.println("a is " + a);
    16           System.out.println("b is " + b);
    17       }
    18  }

(2)单击“文件”|“保存”命令,保存这个文件。并把文件重命名为Sample2_8.java。

(3)打开命令提示符窗口,然后输入下面的命令并按“Enter”键编译程序。

    javac Sample2_8.java

(4)输入下面的命令,运行这个程序。

    java Sample2_8

(5)程序的运行结果如图2-8所示。

图2-8 Sample2_8的编译运行结果