如果你看一下Javadocs,你会看到有两种不同的重载方法remove
。一个采用对象,另一个采用原始整数作为位置:
remove
public E remove(int index)
删除此列表中指定位置的元素。将所有后续元素向左移动(从索引中减去 1)。
上面采用一个原始整数,下面采用一个对象:
remove
public boolean remove(Object o)
从此列表中删除第一次出现的指定元素(如果存在)。如果列表不包含该元素,则它不会改变......
你看到的原因false
是因为你提供了原始的包装类int
. Integer
is an Object,因此 Java 使用与您调用它的方式最相似的方法,在这种情况下,您使用 Object 参数进行调用。 Java然后使用方法签名remove(Object o)
,并且由于指定Integer
ArrayList中不存在,则返回false
.
现在,后者失败的原因是您创建了一个新的 String 数组,从而创建了一个新实例。自从new String[] { var, lex, valor }
and new String[] { var, lex, valor }
不是参考地equal,Java不会在ArrayList中找到相同的Object,并且不会删除该项目。解决方案是使用原始int
:
public void eliminarPos(String var, String lex, String valor, int ii) {
String[] uno = data.remove(ii); //Make sure to use String[], as different types are returned
System.out.println(uno);
}
然后,Java 将使用接受原始整数的方法,因为您传递了原始整数。你看到的原因incompatible types: String[] cannot be converted to boolean
是因为remove(int index)
回报指定位置处的实际对象,或删除的对象,而不是boolean
like remove(Object o)
does.