java语言基础--equals方法
同toString方法一样https://www.cnblogs.com/dssjustdoit/articles/9483837.html,equals()方法也是可以通过重写,来适应我们代码需求的。
比如说,我用Object类创建两个对象o1,o2,常理来说,o1.equals(o2)应该返回true,但是返回的是false,这是因为,equals比较的是两个引用对象的地址值,这自然不相等了,但是我们为了让代码更符合我们的逻辑思维,那么我们需要对equals方法进行重写。
举个栗子:
class Star { int id; String name; public Star(String name, int id) { this.name = name; this.id = id; } public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof Star) { Star s = (Star) obj; if (this.id == s.id && this.name.equals(name)) { return true; } } return false; } } public class Test01 { public static void main(String[] args) { Object o1 = new Object(); Object o2 = new Object(); System.out.println(o1.equals(o2)); Object o3 = o2; System.out.println(o3.equals(o2)); Star s1 = new Star("成龙", 33); Star s2 = new Star("成龙", 33); System.out.println(s1.equals(s2)); } }
s2与s1相同了。
注:可能会疑惑,o1和o2还是不相等啊,那是因为o1和o2的name和id不相等。
注:不同类型是不能用.equals()的方法的。
注:为什么上面this.name.equals(name)这个代码是得到的是true呢,那是因为,在String.java这个类中已经对equals方法进行了重写,所以比较两个对象返回的是true。
注:==的话,比较的是两个对象的地址值。
浙公网安备 33010602011771号