- == 始终比较的是两个对象的身份, 比较的是两个引用中保存的地址的值
- 对于新创建的类,如果没有重写equals方法,默认equals也是比较身份
我们可以通过重写equals方法的方式来自定义"什么叫相等"
我们可以仍然按照身份相同视为相等
对于扑克牌的例子来说,我们也可以按照点数相同视为相等,也可以按照点数和花色都相同视为相等
我们可以通过重写equals就可以实现按照值来比较相等
class Card {
public String rank;
public String suit;
public Card(String rank, String suit) {
this.rank = rank;
this.suit = suit;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof Card)) {
return false;
}
Card other = (Card) obj;
return this.rank.equals(other.rank);
}
}
public class TestCompare {
public static void main(String[] args) {
Card card1 = new Card("10", "♥");
Card card2 = new Card("10", "♠");
Card card3 = card1;
System.out.println(card1.equals(card2));
}
}