Java常用API(5)----包装类

一、包装类概述                                                                                                                                                  点击此处返回总目录

二、Integer类的构造方法

三、Integer类常用方法

四、自动装箱和自动拆箱

五、一道关于自动装箱和自动拆箱的面试题

一、包装类概述

前面讲过,Java有8种基本数据类型。但是基本类型功能不够,希望做一些功能的扩充。java把8种基本类型封装成了对象。而对象就可以调方法了。

字节型 短整型 整  型 长整型 字符型 布尔型 浮点型 浮点型
byte short int long char boolean float double
Byte Short Integer Long Character Boolean Float Double

上表是8种基本类型,及其对应的包装类。比如,Byte是byte的包装类,Byte里面封装了一个基本类型byte,同时提供更多的方法操作数据。在整个的包装类当中,我们主攻Integer,其他类型99%都是一样的。

基本类型包装最大的应用特点:可以在基本数据类型和字符串之间做转换。

二、Integer类的构造方法

1. public Integer(String s)     //将数字格式的字符串,传递到Integer的构造方法中。创建Integer对象,Integer对象中包装的是字符串。

                                              //这个操作只是把s放到了Integer的构造方法当中,不能进行数学运算。要将构造方法中的字符串转化为基                                               //本数据类型,还需要调用非静态方法intValue()转化成int值。

例1:

package cn.itcast.demo01;

public class Test {
    public static void main(String[] args) {
        Integer i = new Integer("123");    //这个操作只是把"123"放到了Integer的构造方法当中,不能进行数学运算。
        int a =i.intValue();                       //要将构造方法中的字符串转化为基本数据类型,还需要调用费静态的方法intValue()
        System.out.println(a-1);              //122
    }
}

三、Integer类常用的方法和静态成员变量

静态成员变量:

1. public static final int MAX_VALUE        //值为 2^31-1 的常量,它表示 int 类型能够表示的最大值。【例6】

2. public static final int MIN_VALUE         //值为 -2^31 的常量,它表示 int 类型能够表示的最小值。【例6】

方法:

1. public static int parseInt(String s)                  //将字符串转化为基本数据类型int。【例1】

2. public static int parseInt(String s, int radix)    //使用radix作为参数,将s转为int。即把s作为radix进制数转化为10进制的int。【例2】

3. public static String toString(int i)                    //如何将一个int数据转换成String类型?【例4】。更简单的方法:【例3】

4. public static String toString(int i, int radix)      //将i转成radix进制。【例5】

5. public int intValue()                                        //以int类型返回该Integer的值。【二、例1】

6. public static String toBinaryString(int i)         //十进制转二进制。将十进制的i转化成二进制的字符串。【例7】

7. public static String toOctalString(int i)           //十进制转8进制。【例8】

8. public static String toHexString(int i)             //十进制转16进制。【例9】

例1:

package cn.itcast.demo01;

public class Test {
    public static void main(String[] args) {
        int a = Integer.parseInt("-222");
        System.out.println(a+1);                        //-221
    }
}

例2:

package cn.itcast.demo01;

public class Test {
    public static void main(String[] args) {
        int a = Integer.parseInt("110",2);
        System.out.println(a);                              //6
    }
}

例3:如何将int数据转变成String类型数据?

package cn.itcast.demo01;

public class Test {
    public static void main(String[] args) {
        int a = 3;
        String s = a+"";                                   //这样就把int转变成了字符串。连接空串即可。任何类型只要加上""就变成了String类型。
        System.out.println(s+1);                     //31.说明s是字符串。
    }
}

例4:将int转换成String类型。

package cn.itcast.demo01;

public class Test {
    public static void main(String[] args) {
        int a = 3;
        String str = Integer.toString(a);
        System.out.println(str+1);                       //31
    }
}

例5:

package cn.itcast.demo01;

public class Test {
    public static void main(String[] args) {
        String str = Integer.toString(4,2);            //把4转化为2进制数。
        System.out.println(str);                           //100
    }
}

例6:

package cn.itcast.demo01;

public class Test {
    public static void main(String[] args) {
        System.out.println(Integer.MAX_VALUE);      //2147483647
        System.out.println(Integer.MIN_VALUE);       //-2147483648
    }
}

例7:

package cn.itcast.demo01;

public class Test {
    public static void main(String[] args) {
        String str = Integer.toBinaryString(4);
        System.out.println(str);                 //100
    }
}

例8:

package cn.itcast.demo01;

public class Test {
    public static void main(String[] args) {
        String str = Integer.toOctalString(10);
        System.out.println(str);                 //12
    }
}

例9:

package cn.itcast.demo01;

public class Test {
    public static void main(String[] args) {
        String str = Integer.toHexString(10);
        System.out.println(str);                 //a
    }
}

四、自动装箱和自动拆箱

这是JDK1.5之后出现的特性,叫自动装箱和自动拆箱。自动就是不需要你来参与,但是需要知道是怎么回事。

自动装箱是指:基本数据类型,直接变成对象。

自动拆箱是指:把对象中的数据,变成基本数据类型。【例1】

自动装箱和自动拆箱的好处:可以直接将基本类型和引用类型计算。但是,自动装箱和自动拆箱也有弊端:可能出现空指针异常。【例2】

例1:自动装箱和自动拆箱。

package cn.itcast.demo01;

public class Test {
    public static void main(String[] args) {
        Integer in = 1;                       //引用变量in一定是指向一个对象,而1是一个基本数据类型,不是个对象。这条语句本来是不对                                                           的,但是程序并没有报错。这就是因为自动装箱,将基本数据类型变成了对象。所以这句话,本                                                         质上是:Integer in = new Integer(1);

        in  = in +1;                            //in是个对象,对象怎么可以与1进行运算呢?这个本来是不对的,但是因为自动拆箱,将对象首先                                                        变成基本数据类型1,然后再计算。相当于:in.intValue()+1。结果为2。然后又自动装箱:in =                                                            new Integer(2)。 
        System.out.println(in);          //1。Integer类重写了Object类的toString()方法。
    }
}

例2:自动装箱和自动拆箱的弊端:引用型变量为空的问题。

package cn.itcast.demo01;

public class Test {
    public static void main(String[] args) {
        Integer in = null;
        //in = in+1;                             //报错。in为null。拆箱时,null.intValue()失败。报空指针异常。
    }
}

五、自动装箱和自动拆箱的面试题

很坑人的题目。

package cn.itcast.demo02;

public class Test {
    public static void main(String[] args) {
        Integer i1 = new Integer(1);
        Integer i2 = new Integer(1);
        System.out.println(i1 == i2);           //false。"=="两边如果是引用数据类型,就是比较地址。
        System.out.println(i1.equals(i2));   //true。说明重写了Object的equal()方法。比较的是数据。

        //数据在byte范围内,JVM不会new新对象。超过byte,会重新new。
        Integer a = 500;                     //相当于:Integer a = new Integer(500);
        Integer b = 500;                     //500>127,不在byte范围内,会new新的对象。所以这句话相当于:Integer b = new Integer(500);
        System.out.println(a==b);               //false。a与b是两个新的对象,所以地址不同。
        System.out.println(a.equals(b));     //true。
    
        Integer aa = 50;                     //相当于:Integer aa = new Integer(50);
        Integer bb = 50;                     //发现50<=127,在byte范围内,不new新对象。相当于:Integer bb = aa;
        System.out.println(aa==bb);             //true。所以 aa和bb是同一个对象。
        System.out.println(aa.equals(bb));   //true。
        
    }
}

猜你喜欢

转载自blog.csdn.net/pengchengliu/article/details/81673532