1、equals的作用及与==的区分
equals被用来推断两个对象是不是相称。
equals一般用来比较两个对象的内容是不是相称,==用来比较两个对象的地点是不是相称。
equals要领默许等同于“==”。
Object类中的equals要领定义为推断两个对象的地点是不是相称(能够明白成是不是是统一个对象),地点相称则以为是对象相称。这也就意味着,我们新建的一切类假如没有复写equals要领,那末推断两个对象是不是相称时就等同于“==”,也就是两个对象的地点是不是相称。
Object类中equals的要领完成以下:
public boolean equals(Object obj) { return (this == obj); }
但在我们的现实开辟中,一般会以为两个对象的内容相称时,则两个对象相称,equals返回true。对象内容差别,则返回false。
所以能够总结为两种状况
1、类未复写equals要领,则运用equals要领比较两个对象时,相当于==比较,即两个对象的地点是不是相称。地点相称,返回true,地点不相称,返回false。
2、类复写equals要领,比较两个对象时,则走复写以后的推断体式格局。一般,我们会将equals复写成:当两个对象内容雷同时,则equals返回true,内容差别时,返回false。
举个例子:
public class EqualTest { public static void main(String[] args) { Person p1 = new Person(10,"张三"); Person p2 = new Person(10,"张三"); System.out.println(p1.equals(p2)); } } class Person{ int age; String name; public Person(int age, String name) { super(); this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Person未复写equals要领,则默许运用了Object中的equals,即为两个对象(p1和p2)的内存地点推断,p1和p2很明显内存地点差别,所以输出效果很明显为false。
假如我们复写equals要领呢?我们以为名字和岁数一样的就是统一个人,那末p1和p2都示意10岁的张三,这两个对象应该是相称的。复写的equals要领以下:
@Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Person other = (Person) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; }
一样的,实行上述用例,获得的效果是true。
BTW:假如equals要领返回true,那末==是不是也是true?
不一定是true。equals返回true有两种能够,一种是两个对象地点雷同,一种是两个对象内容雷同。当内容雷同时,地点能够差别,所以==比较的效果能够为false。
我们把main要领加上对==的推断,以下:
public static void main(String[] args) { Person p1 = new Person(10,"张三"); Person p2 = new Person(10,"张三"); System.out.println(p1.equals(p2)); System.out.println(p1 == p2); }
输出效果很明显 p1==p2的效果是false。
引荐教程:java入门教程
以上就是java怎样推断对象是不是相称的细致内容,更多请关注ki4网别的相干文章!