黑马程序员技术交流社区
标题:
关于ArrayLIst集合调用equals问题
[打印本页]
作者:
张然龙
时间:
2014-5-9 11:41
标题:
关于ArrayLIst集合调用equals问题
本帖最后由 张然龙 于 2014-5-9 18:25 编辑
如注释所描述的 ,为什么取反就调用了Person中的equals方法,不取反就不会调用equals??
代码如下↓
class Person
{
int age;
String name;
Person(String name,int age)
{
this.name=name;
this.age=age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public boolean equals(Object obj)
{
Person per=(Person)obj;
System.out.println("进行了equals比较");//这个地方为什么一次都没读过?????
return this.name.equals(per.getName())&&this.age==per.getAge();
}
}
class Single
{
ArrayList<Person> al1=new ArrayList<Person>();
public ArrayList<Person> method(ArrayList<Person> a)
{
for (Iterator<Person> it = a.iterator(); it.hasNext();)
{
Person per =(Person)it.next();
if(al1.contains(per))//这个地方不用!取反,按理来说也会读到Person类中的覆盖方法equals的啊?
{
al1.add(per);
}
}
return al1;
}
}
class Demo4
{
public static void main(String[] args)
{
ArrayList<Person> al=new ArrayList<Person>();
al.add(new Person("1",10));
al.add(new Person("1",10));
al.add(new Person("1",10));
al.add(new Person("1",10));
al.add(new Person("1",10));
al=new Single().method(al);
System.out.println(al);
}
}
复制代码
作者:
张然龙
时间:
2014-5-9 17:26
都没大神回答我.......
作者:
Yov正
时间:
2014-5-9 17:48
这应该是涉及到jvm的是如何实现contains的。据我测试数组是空的时候就不会调用equals了。
if (true)
{
//al1.add(per);//此句话加上或不加上就能看出效果
al1.contains(per);
}
作者:
张然龙
时间:
2014-5-9 18:08
将add注释掉就不会比较equals,难道contains还要调用add?? 太假了吧??
作者:
张然龙
时间:
2014-5-9 18:19
raikecody 发表于 2014-5-9 18:03
不用"!",一样能读到equals没错的,我编译了好几回,结果都是一样的
以下是我找到的contains方法的源代码, ...
我知道问题出哪里了。。。。。
我的al1值是null的 他就不进行equals比较了。。。。。。:Q:Q:Q:Q:Q:Q
作者:
张然龙
时间:
2014-5-9 18:24
归根结底就是我的al1是null 不调用equals,和equals半毛钱关系都没有。。。。:L
作者:
名字难取
时间:
2014-5-9 18:37
顶个啊啊啊啊啊啊啊啊啊啊啊啊啊
作者:
hx小龙
时间:
2014-5-9 20:01
用了泛型了迭代的时候怎么还强制类型转换去了?嘿嘿
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2