自动装箱、拆箱与遍历循环源代码:
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); //trueSystem.out.println(e == f); //falseSystem.out.println(c ==(a + b)); //trueSystem.out.println(c.equals(a+b)); //trueSystem.out.println(g == (a+b)); //trueSystem.out.println(g.equals(a+b)); //false
}
详解Java自动拆箱、装箱