我有以下两种情况:
1. int值作为参数
int intNum = 2;
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.remove(intNum);
System.out.println(list.size());
// output: 2
Run Code Online (Sandbox Code Playgroud)
2.长值作为参数
long longNum = 2;
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.remove(longNum);
System.out.println(list.size());
// output: 3
Run Code Online (Sandbox Code Playgroud)
我在两种情况下都传递了2作为值,但是我得到了List的不同大小值.这种行为的实际原因是什么?
bee*_*tra 25
自动装箱
该list.remove方法过载,并且两个不同的签名用于不同的目的.一,list.remove(int)根据索引list.remove(Object)删除项目,另一个根据对象相等性删除项目.第一种情况触发第一种类型,第二种情况(带a long longNum)触发第二种类型,将long基元自动装箱到java.lang.Long对象.这不等于java.lang.Integer添加到列表中的(自动装箱)值,因此不会从列表中删除任何内容,并且大小将保持不变.
小心:第一个移除了Integerat index = 2.看到ArrayList.remove(int)
第二个尝试删除对象ArrayList.remove(Object),但是要删除的对象不存在,因为它是一个Long对象.
| 归档时间: |
|
| 查看次数: |
2658 次 |
| 最近记录: |