自动装箱、拆箱与遍历循环源代码:
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,2,3,4);
int sum = 0;
for(int i:list)
sum +=i;
System.out.print(sum);
}
编译之后的代码:
public static void main(String[] args){
List list = Arrays.asList(new Integer[]{ //变长参数变成了数组类型的参数
Integer.valueOf(1); //自动装箱、拆箱转化为对应的包装和还原方法
Integer.valueOf(2);
Integer.valueOf(3);
Integer.valueOf(4);});
int sum=0;
//遍历数组还原成了迭代器实现,这也是为什么遍历循环要求被遍历的类实现Iterable接口的原因
for(Integer localInteger = list.iteratoor();localInterator.hasNext();){
int i = ((Integer) localIterator.next()).intValue();
sum+=i;
}
System.out.println(sum);
}
自动装箱陷阱:
public static void main(String[] args) {
Integer a = 1;
Integer b = 2;
Integer c = 3;
Integer d = 3;
Integer e = 321;
Integer f = 321;
Long g = 3L;
System.out.println(c == d); //true
System.out.println(e == f); //false
System.out.println(c ==(a + b)); //true
System.out.println(c.equals(a+b)); //true
System.out.println(g == (a+b)); //true
System.out.println(g.equals(a+b)); //false
}
详解Java自动拆箱、装箱