这是我刚刚遇到的一个很好的陷阱。
考虑一个整数列表:
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),在处理整数列表时通过引用删除元素?
这里要考虑的要点是@尼基塔提到- 精确参数匹配优先于自动装箱。
Java 总是调用最适合你的论点的方法。仅当没有可以在不强制转换/自动装箱的情况下调用的方法时,才会执行自动装箱和隐式向上转换。
List接口指定了两个remove方法(请注意参数的命名):
remove(Object o)
remove(int index)
这意味着list.remove(1)
删除位置 1 处的对象并remove(new Integer(1))
从此列表中删除第一次出现的指定元素。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)