黑马程序员技术交流社区
标题:
疑问 "=="是调用了谁的hashCode,equals还是compar
[打印本页]
作者:
倪杭乘
时间:
2012-4-26 14:20
标题:
疑问 "=="是调用了谁的hashCode,equals还是compar
ArrayList al = new ArrayList();
Person p = new Person("lisi",19);
al.add(new Person("lisi",19);
Iterator it = al.iterator();
while(it.hasNext()){
Person p1 = (Person)(it.next());
System.out.println(p1==p);
我复写了Person类中的equals方法,compar方法和hashCode方法,输出都是fasle,请问 == 是否调用了Object的哪个方法,原理是什么
作者:
高彰谦
时间:
2012-4-26 14:29
这位兄弟==操作符,
对于基本数据是值比较,
对于相同类型对象是引用比较,
对于不同类型对象,那么其中一个对象的类型必须是另一个类型的父类后者子类,也就是说,必须是继承关系
对于不符合上述条件的对象在使用==比较时,编译时通不过的
作者:
罗旭维
时间:
2012-4-26 16:34
调用的是object的方法,比较的内存地址。
作者:
徐鑫
时间:
2012-4-26 17:45
==属于运算符,没有调用方法,==这个运算符表示的是比较对象的地址。
就ArrayList al = new ArrayList();
Person p = new Person("lisi",19);//这里创建了一个对象
al.add(new Person("lisi",19);//这里创建了一个对象
Iterator it = al.iterator();
while(it.hasNext()){
Person p1 = (Person)(it.next());
System.out.println(p1==p);
也就是说这2个对象的内存地址比较是不会相等的!如果你要true那这样
Person p = new Person("lisi",19);
al.add(p );//这里把P赋进去
Iterator it = al.iterator();
while(it.hasNext()){
Person p1 = (Person)(it.next());
System.out.println(p1==p);
作者:
黑马罗坚
时间:
2012-4-26 19:21
疑问 "=="是调用了谁的hashCode,equals还是comparaTo
==是比较运算符比较的是内存空间地址值是否相等 不会调用任何方法参与运算
ArrayList al = new ArrayList();
Person p = new Person("lisi",19);
al.add(new Person("lisi",19);
Iterator it = al.iterator();
while(it.hasNext()){
Person p1 = (Person)(it.next());
System.out.println(p1==p);所以这里比较的是p1 和 p在堆内存的地址是否想等 跟hashCode,equals compareTO方法没关系
结果为false
如果是System.out.println(p1.equals(p));如果你在Person类覆盖了equals方法则就按照了覆盖的方法来比较 我们覆盖equals方法是想比较对象中的元素是否想到从而对象是否想到 所以结果是true 如果没覆盖那就按照Object类的equals方法判断 更用==比较运算符一样结果false
在集和中hashCode,equals还是comparaTo方法的作用
ArrayList集合对于元素的删查工作如 removo indexOf contains 需要判断元素是否存在 那它是怎么判断的了 它是通过调用equals方法来判断集合中是否有该元素从而进行后续操作 LinkedList 和vector也是通过equals判断 跟hashCode compareTO无关
HashSet 增删改查操作也需要判断而它是先通过hashCode方法判断hashCode是否想到 如果不想到不在进行判断结果false 如果想等 在拿相等的HashCode进行equals判断在进行后续操作 跟compareTo无关
TreeSet 的增删改查的比较是跟据compareTo方法进行的在进行后续操作跟equals和hashCode无关
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2