Java.ArrayList.方法remove()

use*_*011 1 java arraylist

ArrayList中有梅托德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());

    }

}
Run Code Online (Sandbox Code Playgroud)

结果我有:

22
33
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 在第1行参数整数 - 为什么我们没有异常?

  2. 第2行 - 参数字节 - 它不是int而不是Object,为什么不再出现异常?

Boz*_*zho 5

  1. remove(..)方法不通用.它接受任何对象,不检查其类.为了删除元素,应该注意的条件是equals(..)与集合中的元素进行比较时返回true 的方法.元素33未被移除,因为如果不是另一个对象则Long.equals(..)返回falseinstanceof Long

  2. byte被解释为索引.

  • 实际上,问题第二部分的正确答案是,Java 将“byte”原语自动装箱为“java.lang.Byte”对象并调用“ArrayList.remove(Object)”。57:aload_1 58:iload_2 59:invokevirtual #15;//方法 java/util/ArrayList.remove:(I)Ljava/lang/Object; (2认同)