Java基础总结(4)——包装(装箱和拆箱)

自动拆箱和装箱就是,计算数值时,integer会自动转为int进行计算。而当int传入类型为integer的引用时,int数值又会被包装为integer。

装箱就是自动将基本数据类型转换成包装器类型;拆箱就是自动将包装类型转换为基本数据类型;

Integer i = new Integer(10); //以前要生成数值10的Integer对象

Integer i = 10; //装箱
int n = i; //拆箱
  • 总结:装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的 xxxValue方法实现的。(xxx代表对应的基本数据类型)。

对于new Integer(10)和Integer.valueOf(10)区别在于:

  • new Integer(10) 每次都会新建一个对象;
  • Integer.valueOf(10) 会使用缓存池中的对象,多次调用会取得同一个对象的引用。
Integer x = new Integer(10);
Integer y = new Integer(10);
System.out.println(x == y);    // false
Integer z = Integer.valueOf(10);
Integer k = Integer.valueOf(10);
System.out.println(z == k);   // true
Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;
System.out.println(i1==i2); // true
System.out.println(i3==i4); // false

这是由于缓存池的设置,由于valueOf() 方法的实现比较简单,就是先判断值是否在缓存池中,如果在的话就直接返回缓存池的内容。如果不是会new一个新的对象

public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

由下可知创建Integer对象时数值的范围在[-128,127],所以200会显示false。

基本类型对应的缓冲池如下:

  • boolean values true and false
  • all byte values
  • short values between -128 and 127
  • int values between -128 and 127
  • char in the range \u0000 to \u007F
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值