黑马程序员技术交流社区
标题:
List集合的contains方法疑惑
[打印本页]
作者:
godmmm
时间:
2015-1-16 21:41
标题:
List集合的contains方法疑惑
import java.util.ArrayList;
import java.util.List;
public class ArrayListDemo {
/**
* @param args
*/
public static void main(String[] args) {
List<Object> listA=new ArrayList<Object>();
List<Object> listB=new ArrayList<Object>();
listA.add(2);
listA.add("3");
listB.add(2);
listB.add(3);
for(Object o:listA)
{
System.out.println(listB.contains(o));
}
}
}
/*
运行结果:true
false*/
复制代码
按理说定义的Object集合存入数据,数据都变成Object了,
为什么用contains判断,还是按照集合里面具体存入的数据的类型来判断的呢,不是都是Object类型了么??
作者:
梁小刀11
时间:
2015-1-22 22:35
List<Object>可以存放所有类型的对象...
2和2都是int
3和"3"一个是int 一个是String 所以不等...
不知道对不对.
作者:
lwj123
时间:
2015-1-23 18:01
ListA 2 "3"
ListB 2, 3
1、遍历:
2、判断:contains()-->底层调用的还是equals方法
2(Integer) --> 2(Integer)
2(Integer) --> 3(Integer)
"3"(String) --> 2(Integer)
"3"(String) --> 3(Integer)-->这里在equals进行比较时就返回false了
作者:
godmmm
时间:
2015-1-23 18:45
lwj123 发表于 2015-1-23 18:01
ListA 2 "3"
ListB 2, 3
按照类型提升,不是都提升为Object类型了么,或者理解为强转为Object类型,这就难理解了
作者:
Imp_x
时间:
2015-1-25 09:03
new出来都的对象都在堆里,listB.add(3)在堆里面添加了Integer的3
而 listA.add("3"),添加的是String类型的3,String是特殊的对象,存放在方法区的常量池中,
listA.add("3")的意思不是直接把Sting的3存放进去,存进去的是“3”这个字符串在常量池的地址值
equals比较地址值,堆里面的地址值会跟方法区里的一样么{:3_60:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2