今天使用List的remove方法意外遇到一个有趣的现象。记录一下。
实例:
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
Integer index = 0;
list.remove(index);
//问此时list中的元素?
乍一看。list原结果是{"a", "b", "c"},删除第一个元素后,结果应该是{"b", "c"}。但此时结果还是{"a", "b", "c"}。删除失败了。那为什么呢?
remove有两个重构方法(见下图)。一个接收参数是int类型,一个是Object类型。
回到本题中,我们传入的Integer类型,而在java中Object是所有对象的父类。所有我们调用的是remove(Object o)这个方法,根本就还没来得及执行拆箱操作。
也是意外发现的,记录一下。