int是原始类型,integer是int对应的包装类,它有一个int类型的字段存储数据,并且提供基本操作,如数学运算、int和字符串之间转换等
关于integer的值缓存,在调用valueOf时会利用一个缓存机制,带来了明显的性能改进。这个值在-128到127之间
1,理解自动装箱、拆箱
那什么是拆箱呢?顾名思义,跟装箱对应,就是自动将包装器类型转换为基本数据类型:
1 2 |
|
public class Main {
public static void main(String[] args) {
Integer i = 10;
int n = i;
}
}
上面代码反编译代码之后得到
因此可以用一句话总结装箱和拆箱的实现过程:
装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的 xxxValue方法实现的。(xxx代表对应的基本数据类型)。
相关面试题
1.下面这段代码的输出结果是什么?
public class Main {
public static void main(String[] args) {
Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;
System.out.println(i1==i2);
System.out.println(i3==i4);
}
}
答案是ture 和 false ,因为Integer缓存区是-128到127
2,谈谈Integer i = new Integer(xxx)和Integer i =xxx;这两种方式的区别。
当然,这个题目属于比较宽泛类型的。但是要点一定要答上,我总结一下主要有以下这两点区别:
1)第一种方式不会触发自动装箱的过程;而第二种方式会触发;
2)在执行效率和资源占用上的区别。第二种方式的执行效率和资源占用在一般性情况下要优于第一种情况(注意这并不是绝对的)。