2.7 包装类

Java不是纯面向对象的程序设计语言,这是因为它有byte、short、int、long、float、double、char和boolean这些基本类型。Java保留它们是出于效率方面的原因。但有时候,确实需要将这些基本类型作为类来处理。例如在调用方法时,若采用int数据作为参数,在被调方法中就不能改变调用方法中对应参数的值,因为它是按值传送的。但是,若将一个含有int数据的对象作为参数,那么,调用方法中对应参数中int值就可以被改变。

Java语言中专门提供了所谓的包装类(wrapper class)。这些类将以上基本类型包装成类。基本类型与它们对应的包装类见表2.17。

表2.17 基本类型与包装类

使用包装类的方法与其他类一样,定义对象的引用、用new运算符创建对象,用方法来对对象进行操作等。

例如:Ⅰnteger i = new Ⅰnteger(10); // i是 Ⅰnteger类的一个对象,值为10

Ⅰnteger j = new Ⅰnteger(20); // j是 Ⅰnteger类的一个对象,值为20

【例2.7】输出int类型的最大值与最小值和double类型绝对值的最大值与最小值。

              class WrapperDemo{
                public static void main(String args[]){
                  System.out.println(Integer.MAX_VALUE); // int类型的最大值
                  System.out.println(Integer.MIN_VALUE); // int类型的最小值
                  System.out.println(Double.MAX_VALUE); // double类型绝对值的最大值
                  System.out.println(Double.MIN_VALUE); // double类型绝对值的最小值
                }
              }

程序运行结果如下:

              2147483647
              -2147483648
              1.7976931348623157E308
              4.9E-324

包装类中各类的方法虽然不完全相同,但有一些是类似的。下面的例子以 Ⅰnteger类为例,其他类请读者理解这些类中方法名称的构成规律,举一反三。

【例2.8】包装类Ⅰnteger类常用方法的使用以及与int数据进行混合运算的例子。

              class UseWrapper {
                public static void main(String args[]) {
                  int num = 2005;
                  System.out.println(num + " 的二进制是: " +
                    Integer.toBinaryString(num));  // 转换十进制数为二进制数
                  System.out.println(num + " 的八进制是: " +
                    Integer.toOctalString(num));   // 转换十进制数为八进制数
                  System.out.println(num + " 的十六进制是: " +
                    Integer.toHexString(num));     // 转换十进制数为十六进制数
                  Integer iobj = Integer.valueOf("123");
                  Integer iobj1 = new Integer(234);
                  Integer iobj2 = new Integer("234");
                  int i = iobj.intValue();
                  System.out.println("iobj = " + iobj);
                  System.out.println("i = " + i);
                  System.out.println("iobj1==iobj2 ? " + iobj1.equals(iobj2));
                  // 比较两个对象是否相等
                  iobj = iobj + num;         // int数据和Integer数据可以混合运算
                  System.out.println("iobj = " + iobj);
                  num = iobj + num;
                  System.out.println("num = " + num);
                }
              }

程序运行结果如下:

              2005 的二进制是: 11111010101
              2005 的八进制是: 3725
              2005 的十六进制是: 7d5
              iobj = 123
              i = 123
              iobj1==iobj2 ? true
              iobj = 2128
              num = 4133