我怀疑并希望知道JRE可能使用哪种类方法来删除下面代码中的对象。因为remove有两个签名remove(int)和remove(Object)。作为AutoBoxing功能的一部分,此处将int添加到Collection时将其视为Integer。在这种情况下,删除方法会获得更高的优先级,为什么?请分享原因......
Vector v=new Vector();
for(int i=0;i<10;i++)
{
v.add(i);
}
v.remove(5);
System.err.println(v);
此致 Sudhakar Chavali
答案 0 :(得分:3)
它拿起索引一
package com.jigar.stackoverflow.question.java;
public class VectorAutoBox {
public static void main(String[] args) {
Vector vector = new Vector();
vector.add(1);
vector.add(5);
vector.add(2);
vector.add(3);
vector.add(4);
vector.add(6);
System.out.println(vector);
vector.remove(5);
System.out.println(vector);
}
}
<强>输出强>
[1, 5, 2, 3, 4, 6]
[1, 5, 2, 3, 4]
答案 1 :(得分:3)
在不构造类Integer的实例的情况下,参数是一个int,Vector的方法可以直接处理它而不需要自动装箱。编译器使用Java Language Specification中详述的最简单方法。
此版本删除第二个Integer(index = 1),因为它显式为Integer:
import java.util.Vector;
public class VectorAutoBox {
public static void main(String[] args) {
Vector vector = new Vector();
vector.add(1);
vector.add(5);
vector.add(2);
vector.add(3);
vector.add(4);
vector.add(6);
System.out.println(vector);
vector.remove( new Integer( 5 )); // case 1
// vector.remove( 5 ); // case 2
System.out.println(vector);
}
}
案例1的输出:
[1, 5, 2, 3, 4, 6]
[1, 2, 3, 4, 6] value '5' at index 1 removed
案例2的输出:
[1, 5, 2, 3, 4, 6]
[1, 5, 2, 3, 4] value '6' at index 5 removed
答案 2 :(得分:3)
JLS #15.12.2详细说明了确定哪些方法适用的规则。实质上,不需要装箱/拆箱的方法优先于需要装箱/拆箱操作的方法:
- 第一阶段(§15.12.2.2)执行重载解析而不允许装箱或拆箱转换,或使用变量arity方法调用。如果在此阶段没有找到适用的方法,则处理继续到第二阶段。
- 第二阶段(§15.12.2.3)在允许装箱和拆箱的同时执行重载解析,但仍然排除使用变量arity方法调用。
编写remove(int)
时会调用remove(5);
。
请注意,Vector在大多数情况下都已过时。