Java 关于版本的收集方法>=爪哇5
我有一个疑问,想知道JRE可能使用了哪种类方法来删除下面代码中的对象。因为remove有两个签名remove(int)和remove(Object)。作为自动装箱功能的一部分,在将int添加到集合时,这里int将被视为整数。在这种情况下,哪个remove方法将获得更高的优先级,为什么?请分享原因Java 关于版本的收集方法>=爪哇5,java,autoboxing,Java,Autoboxing,我有一个疑问,想知道JRE可能使用了哪种类方法来删除下面代码中的对象。因为remove有两个签名remove(int)和remove(Object)。作为自动装箱功能的一部分,在将int添加到集合时,这里int将被视为整数。在这种情况下,哪个remove方法将获得更高的优先级,为什么?请分享原因 Vector v=new Vector(); for(int i=0;i<10;i++) { v.add(i); }
Vector v=new Vector();
for(int i=0;i<10;i++)
{
v.add(i);
}
v.remove(5);
System.err.println(v);
Vector v=new Vector();
对于(inti=0;i它拾取索引1
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]
在不构造Integer类实例的情况下,参数是int,Vector方法可以直接处理它,而无需自动装箱。编译器使用中详述的最简单方法
此版本删除第二个整数(index=1),因为它显式是一个整数:
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
确定哪些方法适用的规则详见。实质上,不需要装箱/拆箱的方法优先于需要装箱/拆箱操作的方法:
- 第一阶段(§15.12.2.2)执行重载解析,不允许装箱或拆箱转换,也不允许使用变量arity方法调用。如果在此阶段未找到适用的方法,则处理继续到第二阶段
- 第二阶段(§15.12.2.3)在允许装箱和拆箱的同时执行重载解析,但仍然禁止使用变量arity方法调用
因此,在编写remove(5);
时,会调用remove(int)
请注意,Vector在大多数情况下都是过时的。您可以通过填充Vector来验证,这样做如何证明使用了哪种方法?@kevin it在第5页删除了该项index@Jigar乔希啊!真聪明。