码迷,mamicode.com
首页 > 其他好文 > 详细

自动装箱、拆箱

时间:2018-07-20 23:38:01      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:.com   eva   之间   str   打包   change   hang   一个   范围   

package day1;

public class Change {
  public static void main(String[] args) {
     int data1=100;
     int data2=100;
     Integer integer1=new Integer(data1);  //将int类型打包成Integer类型
     Integer integer2=new Integer(data2);
     System.out.println(data1/3);         //基本类型的算法
     System.out.println(integer1.doubleValue()/3);  //包装器类型调用方法转换为double类型
     System.out.println(integer1.compareTo(integer2));
              }
}

1.打包基本类型

java中的基本类型要想像对象一样使用,需要被打包器打包,打包器有Long、Integer、Double、Float、Boolean、Byte。

上面的打包器对象integer1调用doubleValue()方法,变为double类型,运算结果为3.3333333333.

2.自动装箱与拆箱

jdk1.5之后,为了简洁代码,提供了自动装箱和拆箱功能。

Integer i=10;

自动将int类型打包为Integer类型。

int t=i;

自定将被打包的Integer类型的int类型值赋给t。

在运算时也会自动进行自动装箱和拆箱。

Integer i=10;
System.out.println(i+9);//运算时完成自动拆箱。

3.装箱内幕

Integer i=1;

编译器在编译期间会自动将代码扩展为:Integer i=Integer.valueOf(1);

我们查看Integer的valueOf()方法的源码:

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

如果传入的值在IntegerCache.low 到IntegerCache.high之间,那么Integer对象i的值存在缓存中,如果后面传入相同的值,那么会看看缓存中有没有这个值,有就会取这个值。

如果超出这个范围(-128-127),就会在内存中创建一个新的对象。

package day1;

public class Change {
  public static void main(String[] args) {
    
     Integer integer1=100;
     Integer integer2=100;
     Integer integer3=200;
     Integer integer4=200;
     System.out.println(integer1==integer2);
     System.out.println(integer3==integer4);
              }
}

结果为:true

               false

 

自动装箱、拆箱

标签:.com   eva   之间   str   打包   change   hang   一个   范围   

原文地址:https://www.cnblogs.com/zzuli/p/9344562.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!