Java基础-包装类

目录

一、基本数据类型所对应的包装类

二、装箱与拆箱

三、整数缓存机制


在Java中,包装类是对基本数据类型的对象封装,使得基本数据类型能够像对象一样操作。Java 提供了八种基本数据类型的对应包装类,它们都位于java.lang包中。


一、基本数据类型所对应的包装类

除了int-Integer、char-Character,其他的基本数据类型所对应的包装类都是首字母大写。


二、装箱与拆箱

装箱与拆箱是Java中基本数据类型与其对应的包装类之间的转换机制。将基本数据类型转换为对应的包装类对象的过程称为装箱,将包装类对象转换为对应的基本数据类型的过程称为拆箱

        //显示装箱
        Integer num1 = Integer.valueOf(200);
        //自动装箱
        Integer num2 = 100;          //编译器自动转换

        Integer num = 200;           //自动装箱
        //显示拆箱
        int num3 = num.intValue();
        //自动拆箱
        int num4 = num;              //编译器自动转换

装箱分为显示装箱与自动装箱,同样的拆箱分为显示拆箱与自动拆箱。自动装箱与自动拆箱由编译器自动转换,实践上在底层也调用了相对应的方法

使用javap -c Test(类名)命令反编译Java类文件并显示其字节码,可见对于自动装箱与拆箱都是由编译器帮我们调用了相对应的方法的。

 


三、整数缓存机制

public class Test2 {
    public static void main(String[] args) {
        Integer num1 = Integer.valueOf(100);
        Integer num2 = Integer.valueOf(100);
        Integer num3 = Integer.valueOf(300);
        Integer num4 = Integer.valueOf(300);
        System.out.println(num1 == num2);       //true
        System.out.println(num3 == num4);       //false
        System.out.println(num3.equals(num4));  //true
    }
}

为什么得到这三个结果? 

对于valueOf方法,如果参数的数值是在[IntegerCache.low,IntegerCache.high],则返 回 IntegerCache.cache[i + (-IntegerCache.low)]数组中Integer类型的对象,如果不是则返回一个新的对象。

low==-128,high==127,所以数值在-128到127之间时,Integer对象会被缓存,因此相同的数值在这个范围内会共享同一个对象,而超出该范围的数值则是每次创建一个新的Integer对象。

100在缓存范围内,num1和num2实际上引用的是同一个对象,所以num1==num2为true

300不在缓存范围内,num3和num4引用的不是同一个对象,num3==num4为false

equals()方法比较的是对象的内容,num3.equals(num4)为true

public class Test3 {
    public static void main(String[] args) {
        Integer a = 10;     //自动装箱,在[-128,127]使用缓存
        Integer b = 10;     //在[-128,127]同样使用缓存
        System.out.println(a == b); //true
        Integer c = 180;    // 不在[-128,127]自动装箱,创建新对象
        Integer d = 180;    // 不在[-128,127]创建另一个新对象
        System.out.println(c == d); //false
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值