Java包装类

x33g5p2x  于2021-10-06 转载在 Java  
字(1.9k)|赞(0)|评价(0)|浏览(198)

一.什么是包装类

包装类继承结构图

二.包装类应用场景

1、集合类泛型只能是包装类;

// 编译报错
List<int> list1 = new ArrayList<>();

// 正常
List<Integer> list2 = new ArrayList<>();

2、成员变量的默认值;

private int status; //基本数据类型 默认为0
private Integer status; //包装类型 默认为null

基本数据类型的成员变量都有默认值,如以上代码 status 默认值为 0,因为代码编写的问题,在赋值过程中 ,没有进行处理null值,就给status赋值了,那样就可能会出现问题,为了避免这样问题出现,只能使用包装类 Integer,它的默认值为 null,所以就不会有默认值影响,也就省掉了去处理null的麻烦了.

3、方法参数允许定义空值;

private static void test1(int status){//不可以传null
    System.out.println(status);
}

private static void test1(Integer status){//可以传null
    System.out.println(status);
}

看以上代码,方法参数定义的是基本数据类型 int,所以必须得传一个数字过来,不能传 null,很多场合我们希望是能传递 null 的,所以这种场合用包装类比较合适。

注意.包装类是对象.所以在使用==比较的是地址 如果需要比较值的话那么使用包装类中的,equals 用法和String中的equals一样,当然也是可以使用Objects.equals()的

所有包装类里的方法基本相同 ,所以下面案例只拿几种来演示

三.自动装箱、拆箱

装箱:基本数据类型转换为包装类;

拆箱:包装类转换为基本数据类型。

//1.自动装箱
        int t1=1;
        Integer t2=t1;
 //2.手动装箱
        Integer t3=new Integer(t1);
        System.out.println("int类型t1="+t1);
        System.out.println("自动装箱,Integer类型对象t2="+t2);
        System.out.println("手动装箱,Integer类型t3="+t3);

//1.自动拆箱
        int t4=t2;
 //2.手动拆箱
      //通过intValue()方法返回int值,还可以利用其他方法装换为其他类型
        int t5=t2.intValue();
        System.out.println("自动拆箱,int型t4="+t4);
        System.out.println("手动拆箱,int型t5="+t5);

四.基本数据类型,字符串和包装类的转换

通过包装类Integer.toString()–将整型转换为字符串;

通过Integer.parseInt()–将字符串转换为int类型;

通过valueOf()–把字符串转换为包装类然后自动拆箱

//基本数据类型转换为字符串
        int t1=12;
        String t2=Integer.toString(t1);
        System.out.println("int转换为String:"+t2);
//字符串转换为基本数据类型
        //通过paerInt方法 将字符串转为int 
        int t3=Integer.parseInt(t2);
        //通过valeOf,先把字符串转换为包装类然后通过自动拆箱 转换为int
        int t4=Integer.valueOf(t2);
        System.out.println("t3:"+t3);
        System.out.println("t4:"+t4);

五.包装类缓存概念

Java为了提高拆装箱效率,在执行过程中提供了一个缓存区(对象池)【类似于常量数组】如果传入的参数是,-128 ~127 会直接去缓存查找数据,如果有久直接产生,如果没有就隐式调用new方法产生

Integer three=100;
// 这时缓存区没有,就会构造一个
Integer four=100;
//这时缓存区有,就会直接取
 Integer five=200;
//这里为200,超出了缓存区范围,所以就会隐式 new Integer(200)

六.整形进制转换

IntegerLong

toBinaryString(int i) //转2进制
Integer.toHexString(int i) //转16进制
Integer.toOctalString(int i)//转 8进制

相关文章