List<Integer> useCases = new ArrayList<Integer>();
Collections.addAll(useCases, 47, 48, 49, 50);
useCases.remove(new Integer(47));
为什么新实例的整数对象与useCase中的int值47相匹配?
如果实例化47的多个整数类型,它们是否都与useCase中的47值相对应,并且它们都可以引导列表删除47的值吗?
答案 0 :(得分:6)
首先,当您传递原始整数(例如47)时,它将被“自动装箱”到值为47的Integer。其次,Integer.equals()方法将比较原始值。
答案 1 :(得分:3)
为进一步说明别人所说的内容,此代码:
Collections.addAll(useCases, 47, 48, 49, 50);
实际上是这个的简写:
Collections.addAll(useCases,
Integer.valueOf(47),
Integer.valueOf(48),
Integer.valueOf(49),
Integer.valueOf(50));
因为列表不能包含基元,只能包含对象。当编译器自动将基元转换为等效的包装器类值时,我们说编译器将它们“自动装箱”。
此行:
useCases.remove(new Integer(47));
并不意味着“仅删除该确切参数”。它的意思是“删除与该参数相同的第一个对象。”
根据Integer类的new Integer(47)
方法, Integer.valueOf(47)
等于equals
,因此Integer.valueOf(47)是要删除的对象。
顺便说一下,new Integer
是deprecated。 Integer.valueOf和自动装箱是其替代品。
答案 2 :(得分:0)
正如Steve11235所说,equals()方法比较两个对象。
public class Animal {
String name;
int live;
public Animal(String name, int live) {
this.name = name;
this.live = live;
}
}
现在:
Animal animal = new Animal("Monkey",15);
Animal animal2 = new Animal("Cat",15);
List<Animal> animals = new ArrayList<Animal>();
Collections.addAll(animals, animal,animal2);
animals.remove(new Animal("Cat",15);
这是行不通的,因为equals方法不比较对象,而只是比较引用。