2.2.3 数据类型

数据类型除了前面提到过的数值型,还有字符型、日期型等。每个数据类型都有它的取值范围,编译器会根据每个变量或常量的数据类型为其分配内存空间。变量中存储的数据的数据类型应该跟变量声明的数据类型一致,否则会报错。例如,如果变量age声明为整型,则它只能存储1、2、3等整型数据,而不能存储1.0、3.14等浮点型数据或'a'、'b'、'c'等字符型的数据。Java的数据类型包括基本数据类型和引用数据类型,各自下面又有分类,如图2.2所示。其中基本数据类型有8种,如表2.2所示,引用数据类型以后再做介绍。

图2.2 数据类型分类

表2.2 基本数据类型

1.整数类型

Java使用4种类型的整数:byte、short、int和long。编写程序时应该为变量选择最适合的数据类型。例如,知道存储在变量中的整数是在1字节范围内,应将该变量声明为byte型。为了简单和一致性,本书的大部分内容都使用int来表示整数。

long类型的数据,需要在数字后面加上字母L或l(L的小写形式)来表示。如果数据的值不超过int的取值范围,也可省略。示例代码如下。


public static void main(String[]args) { 
      long data1=1000000000; //没有超出int的取值范围,省略字母L 
      long data2=10000000000;  //超出了int的取值范围,报错 
      long data3=10000000000L;  //加上字母L就不报错了 
}

整数又分为二进制整数、八进制整数、十六进制整数和最常用的十进制整数。

二进制整数:由0和1组成的数字序列,逢二进一,如1101。在Java中二进制整数前面还要加上0b或0B才能表示是二进制数,否则会被当成十进制数,如0b1101或0B1101。

八进制整数:由0、1、2、3、4、5、6、7组成的数字序列,逢八进一,如72。在Java中八进制整数前面还要加上0才能表示是八进制数,否则会被当成十进制数,如072。

十六进制整数:由数字0~9和字母a~f共16个字符组成的序列,其中a代表10,b代表11,依此类推,逢十六进一,如a9。在Java中十六进制整数前面还要加上0x或0X才能表示是十六进制数,否则会报错或被当成十进制数,如0xa9或0Xa9。

二进制、八进制、十六进制的整数在输出时都会被转换成十进制整数。示例代码如下。


public static void main(String[]args) {             
    int num2=0b1101; 
    System.out.println(num2);  
    num2=1101;   //删除0b将被当成十进制数 
    System.out.println(num2); 
    int num8=072; 
    System.out.println(num8); 
    num8=72;     //删除0将被当成十进制数 
    System.out.println(num8); 
    int num16=0xa9; 
    System.out.println(num16); 
    //num16=0xa9;  //删除0x将报错 
}

运行结果:


13 
1101 
58 
72 
169

2.浮点型

Java使用两种类型的浮点数:float和double。double称为双精度(double precision),而float称为单精度(single precision)。通常情况下,应该使用double型,因为它比float型更精确。Java中,在小数后面加上字母F或f表示float型数据,在小数后面加字母D或d表示double型数据。如果一个小数后面不加字母,则默认为double型数据。示例代码如下。


public static void main(String[]args) { 
      double data1=1.87D;  //小数后面加D,表示double型数据 
      double data2=1.87;   //小数后面没有加D,默认为double型数据 
      float data3=1.87;    //报错,double型数据不能存入float型变量中 
      float data4=1.87F;   //小数后面加F表示float型数据 
}

3.字符型

字符型(char)的变量只能存储单独一个字符。赋值时,需要用一对单引号将一个字符引起来再赋值,如char a='a'。也可以将一个整数赋给char型变量,编译器将自动将整数转换成ASCII编码表对应的字符。示例代码如下。


public static void main(String[]args) { 
      char c1='c';            //赋值字符c 
      System.out.println(c1); 
      char c2=99;              //赋值整数99,根据ASCII编码表,99代表字符c 
      System.out.println(c2); 
}

运行结果:


c 
c

4.布尔型

在现实生活中经常要拿两种事物进行比较,比较结果可能是“真”,也可能是“假”。例如,太阳比地球大,比较结果是“真”;月亮比地球大,比较结果是“假”。比较结果不是“真”就是“假”,只有这两个取值。布尔型正是用来表示比较结果的,它只有两个取值,即“真”或“假”,在Java中用关键字boolean表示布尔型,它只有两个取值:true和false,分别代表布尔逻辑中的“真”和“假”。若一个变量声明为布尔型,则它只能存储true或false这两个值之一,而不能存储其他值。示例代码如下。


public static void main(String[]args) { 
      boolean bigger;  //声明一个布尔型变量 
      bigger=true;     //赋布尔型数据true,正确 
      bigger=false;    //赋布尔型数据false,正确 
      bigger=100;      //赋整型数据,报错 
}

5.String型

String型不属于基本数据类型,是类的一种,后面会做详细介绍。但前面有多处用到它,这里要先做简单说明。String型又称字符串型,用于存储字符串,字符串是由一个或多个键盘字符组成的字符序列,用双引号引起来。例如"HelloWorld"就是一个典型的字符串,可以将它赋给一个String类型的变量。示例代码如下。


String hello="HelloWorld"