有谁能解释一下Vector的indexOf方法调用哪个equals方法?

qps2006 2008-04-22 01:50:22
请看以下测试程序,为何调用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");
}
}
...全文
131 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qps2006 2008-04-23
  • 打赏
  • 举报
回复
我明白了,感谢楼上各位!

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");
}
}
king_spf 2008-04-22
  • 打赏
  • 举报
回复
因为Integer 中重写了equals方法,在调用方法时会自动调用子类重写的方法。
这时最基本的多态!
建议楼主好好的看看多态!
richard_2010 2008-04-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 Johnson_Hong 的回复:]
放进去的元素就是Integer型的啊,object是它的基类,但是调用的时候还是调用的那个元素的类型里面的equals
[/Quote]
sweethe123 2008-04-22
  • 打赏
  • 举报
回复
多态
guoxiaopeng1982 2008-04-22
  • 打赏
  • 举报
回复
今天比较无聊,看见这个问题,我就把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]这句,所以你应该知道问题答案了吧
ReHall 2008-04-22
  • 打赏
  • 举报
回复
i1,i2是Inreger类型的,根据java多态性,使用的是equals方法,object是基类
anqini 2008-04-22
  • 打赏
  • 举报
回复
虽然indexOf方法接受的是Object类型,但是你传进去的是Integer类型,利用多太机制,它执行Integer的equals方法!
Johnson_Hong 2008-04-22
  • 打赏
  • 举报
回复
放进去的元素就是Integer型的啊,object是它的基类,但是调用的时候还是调用的那个元素的类型里面的equals
kingssq 2008-04-22
  • 打赏
  • 举报
回复
这是基本的多态。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧