在上一篇文章中,有一道题目是判断两个对象的equals判断,具体的链接是这儿
http://gaofulai1988.iteye.com/admin/blogs/2252489
大部分人可能知道第一个输出是false,毫无疑问,==比较对象肯定是地址,对如第二个,有些人可能就不是那么清楚了,因为大部分的初学者的思维里是equals是比较内容的,刚好两个对象的内容都是一样的,所以想当然结果是true,然而实际的结果是false,为什么呢?
所有类有一个父类,即是Object,不管你写没有写,Object是你的父类,这是一个不能改变的事实。Object类里有一个equals()方法,看看它是怎么来实现的。
public boolean equals(Object obj) {
return (this == obj);
}
看到没有,它是比较两个对象的地址是否是一样的,所以在Person类中没有重写equals()方法,它就会用父类中的equals()方法。
如果你想比较两个对象是否相同,那么你就要重写equals()方法,你可以这样来写:
@Override
public boolean equals(Object obj){
Person p=(Person)obj;
if(this.name.equals(p.getName())&& this.age==p.getAge())
return true;
}
else{
return false;
}
}
你会问怎么String类型的数据直接用equals()方法来比较呢,这是因为String类中重写了这个方法,所以才可能,如果Person类中重写了equals()方法,那么如果比较两个对象内容相等时,前一个例子才会输出true。
分享到:
相关推荐
java_equals用法,用来熟悉重写equals方法的
equals的源代码: public boolean equals(Object obj){ return (this==obj); } 那么s1.equals(s2)的返回值不就是 (s1==s2) 吗? 但是s1.equals(s2);结果为true s1==s2; 结果为false 问题三: class Student{ ...
equals()和hashcode()这两个方法都是从object类中继承过来的。当String 、Math、还有Integer、Double。。。。等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法.
重载equals方法示例重载equals方法示例重载equals方法示例重载equals方法示例重载equals方法示例
Java equals 方法与hashcode 方法的深入解析.rar
解析Java对象的equals()和hashCode()的使用
本文讲述了什么时候重写equals方法和如何重写equals方法。
能够加强对java中equals与==区别的理解。
Java中equals方法隐藏的陷阱
winform 重写Equals源码! 很值得下载看看!资源免费,大家分享!!
java 资料 equals 与== 的区别
重写toString和equals方法的意义以及方法
本文还介绍了定义对象的相等性、实施equals()和hashCode()的需求、编写自己的equals()和hashCode()方法。通过统一定义equals()和hashCode(),可以提升类作为基于散列的集合中的关键字的使用性。
知识点 比较运算符==和equals方法的比较 知识点 比较运算符==和equals方法的比较
Java语言深入_equals
equals():反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,也可能是值类型的值。 hashCode():计算出对象实例的哈希码,并返回哈希码,又称为散列函数。根类Object的hashCode()方法的...
2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2....
java中比较值大小,==和equals的区别,基本数据类型和引用数据类型比较值方法
HashCode相同equals不同的2位字符集合算法 另附ASCII码表
String中==与equals区别验证