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