Java基础知识_自动装箱和拆箱

装箱就是将基本类型和他们对应的引用类型包装起来

拆箱就是将包装类型转换成基本的数据类型

Integer x=2;//装箱

int y=x;    //拆箱

缓存池

new Integer(123)与Integer.valueOf(123)的区别在于:

  1、new Integer(123)每次都会创建一个新的对象

  2、Integer.valueOf(123)会使用缓存池中的对象,多次调用取得同一个对象的引用

1 Integer x=new Integer(123);
2 Integer y=new Integer(123);
3 System.out.println(x==y);     //false
4 
5 Integer z=Integer.valueof(123);
6 Integer k=Integer.valueof(123);
7 System.out.println(z==k);     //true 

其实valueof方法的实现比较简单,就是先判断值是否在缓存池中,如果在的话就直接返回缓存池的内容

1 public static Integer valueof(int i){
2      if(i>=IntegerCache.low && i<=IntegerCache.high)
3              return IntegerCache.cache[i+(-IntegerCache.low)];
4      return new Integer(i);    
5 }

在Java 8中,Integer 缓存池的大小默认是-128-127

编译器会自动装箱过程中调用valueof方法,因此多个值相同且值在缓存池范围内的Integer实力使用自动装箱来创建,那么就会引用相同的对象。

1 Integer m=123;
2 Integer n =123;
3 System.out.println(m==n);//true

 

posted @ 2019-08-03 19:25  chyblogs  阅读(132)  评论(0编辑  收藏  举报