请看以下测试程序,为何调用Integer的equals而不是Object的equals?
import java.util.*;class t5
 {public static void main(String args[])
   {Vector v=new Vector();
    Integer i1=new Integer(0),i2=new Integer(1);
    v.addElement(i1);    v.addElement(i2);
    if(v.contains(new Integer(0))) System.out.println("true");
    if(v.indexOf(new Integer(0))==0) System.out.println("true");
   }
 }

解决方案 »

  1.   

    放进去的元素就是Integer型的啊,object是它的基类,但是调用的时候还是调用的那个元素的类型里面的equals
      

  2.   

    虽然indexOf方法接受的是Object类型,但是你传进去的是Integer类型,利用多太机制,它执行Integer的equals方法!
      

  3.   

    i1,i2是Inreger类型的,根据java多态性,使用的是equals方法,object是基类
      

  4.   

    今天比较无聊,看见这个问题,我就把java的源码打开看了下,发现了是这样写的
    public boolean contains(Object elem) {
    return indexOf(elem, 0) >= 0;
    }说明contains方法还是调用的indexOf这个方法。
    public int indexOf(Object elem) {
    return indexOf(elem, 0);
        }
    public synchronized int indexOf(Object elem, int index) {
    if (elem == null) {
        for (int i = index ; i < elementCount ; i++)
    if (elementData[i]==null)
        return i;
    } else {
        for (int i = index ; i < elementCount ; i++)
    if (elem.equals(elementData[i]))
        return i;
    }
    return -1;
        }
    请注意elem.equals(elementData[i]这句,所以你应该知道问题答案了吧
      

  5.   

    因为Integer 中重写了equals方法,在调用方法时会自动调用子类重写的方法。
    这时最基本的多态!
    建议楼主好好的看看多态!
      

  6.   

    我明白了,感谢楼上各位!import java.util.*;class t6
     {public static void main(String args[])
       {Integer i=new Integer(0);
        if(((Object)i).equals(new Integer(0))) System.out.println("true");
       }
     }