Java ArrayList:添加基本类型或其包装类:有什么区别?

BNe*_*etz 0 java primitive arraylist

想象一下Java中的以下ArrayList:

ArrayList<Integer> u = new ArrayList<Integer>();
Run Code Online (Sandbox Code Playgroud)

我想知道在将新值添加为基本类型或包装类时是否存在差异:

u.add(new Integer(12));
u.add(12);
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Cra*_*lus 8

add由于自动装箱/拆箱没有区别.实际上不要这样做new Integer(12),Integer.valueOf(12)因为它使用flighweight模式并重用已知对象(在-128,127范围内).因此不会创建新对象.

remove例如,存在差异.
因为如果你打算remove(Object)打电话remove(5)会打电话remove(int index),这可能不是你想要的.如果要删除数字或者要删除第五个元素,则
应该执行此操作.remove((Integer)5)5remove(5)


Naz*_*iuk 7

当你做u.add(12);编译器重写它u.add(Integer.valueOf(12));u.add(new Integer(12)); 在官方教程http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html上阅读更多更有效.