ArrayList有metod remove(int index)
和remove(Object o)
,所以
我尝试运行此代码: public static void main(String args []){
ArrayList<Long>ar=new ArrayList<Long>();
ar.add(11L);
ar.add(22L);
ar.add(33L);
ar.remove(new Integer(33)); // 1
byte b =0;
ar.remove(b); //2
for(Iterator i=ar.iterator(); i.hasNext();)
{
System.out.println(i.next());
}
}
结果我有:
22
33
我的问题:
整数 - 为什么我们没有异常?
第2行 - 参数字节 - 它不是int而不是Object,为什么不再出现异常?
答案 0 :(得分:5)
remove(..)
方法不是通用的。它接受任何对象,不检查其类。为了删除元素,应该注意的条件是equals(..)
方法,与集合中的元素相比,返回true。未删除元素33,因为如果另一个对象不是Long.equals(..)
false
会返回instanceof Long
byte
被解释为索引。
答案 1 :(得分:2)
因为这两个都被转换为正确的类型。在第一个中,它是remove(Object o),其中o是Integer(33)。但是它并没有在你的arraylist中找到那个对象,所以它根据定义返回false:
返回: 如果此列表包含指定的元素,则返回true。
第二个可能会被转换为int,所以你要删除第一个索引。
答案 2 :(得分:1)
1)传递一个不在列表中的对象。没有任何反应。
2)它不是传递的对象,而是索引(0)。所以arraylist中的第一个元素被删除了。
答案 3 :(得分:1)
Java内置了自动装箱功能,可为您节省类型化各种数字表示的时间。没有错误,因为Java会找出你的意思并为你转换它。
答案 4 :(得分:1)
答案 5 :(得分:0)
看看javadocs。 ArrayList.remove采用Object,Integer是Object。
[更新]忘了回答第二个问题。
该字节有效,因为我认为它是对象的autoboxed,或者它是作为索引向上转换为int。