这是我刚刚遇到的一个很好的陷阱。 考虑一个整数列表:
List<Integer> list = new ArrayList<Integer>();
list.add(5);
list.add(6);
list.add(7);
list.add(1);
关于执行 list.remove(1)
时会发生什么的任何有根据的猜测? list.remove(new Integer(1))
怎么样?这可能会导致一些严重的错误。
区分 remove(int index)
的正确方法是什么? , 它从给定索引和 remove(Object o)
中删除一个元素, 它在处理整数列表时通过引用删除元素?
这里要考虑的要点是 @Nikita mentioned - 精确参数匹配优先于自动装箱。
最佳答案
Java 总是调用最适合你论点的方法。自动装箱和隐式向上转换仅在没有不进行转换/自动装箱的情况下可以调用的方法时才执行。
List接口(interface)指定了两个remove方法(请注意参数的命名):
删除(对象 o)
删除(整数索引)
这意味着 list.remove(1)
删除位置 1 的对象,remove(new Integer(1))
从中删除第一次出现的指定元素这个列表。
关于java - 从 List<Integer> 中正确删除 Integer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22750152/