欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java ==和equals

呂致盈1年前7瀏覽0評論

Java中有兩種比較對象相等的方式:==和equals方法。

==是比較對象的地址是否相等。在Java中,所有的對象都是在堆內存中創建的,每個對象在創建時都有一個唯一的地址,這個地址被存儲在棧中,而==比較的就是這個地址是否相等。

String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2);  // false

上述代碼中,雖然s1和s2都是內容相等的字符串對象,但是它們在堆內存中分別有自己的地址,因此==比較的結果是false。

而equals方法是比較對象的內容是否相等。在Java中,所有的對象都繼承了Object類,Object類中的equals方法比較的就是對象的地址是否相等,因此如果要比較對象的內容是否相等,需要重寫equals方法。

class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public boolean equals(Object obj) {
if (obj instanceof Person) {
Person p = (Person) obj;
return this.name.equals(p.name) && this.age == p.age;
}
return false;
}
}

上述代碼中,我們重寫了Person類的equals方法,比較的是Person對象的內容是否相等。如果兩個Person對象的name和age都相等,那么equals方法返回true,否則返回false。

需要注意的是,在重寫equals方法時,需要保證它滿足以下幾個條件:

  • 自反性:對于任意非null的引用x,x.equals(x)都應該返回true。
  • 對稱性:對于任意非null的引用x和y,如果x.equals(y)返回true,那么y.equals(x)也應該返回true。
  • 傳遞性:對于任意非null的引用x、y和z,如果x.equals(y)返回true并且y.equals(z)也返回true,那么x.equals(z)也應該返回true。
  • 一致性:對于任意非null的引用x和y,如果用于equals比較的對象沒有被修改,那么多次調用x.equals(y)應該始終返回true或始終返回false。
  • 非空性:對于任意非null的引用x,x.equals(null)都應該返回false。

在使用Java比較對象相等時,需要根據具體的需求選擇使用==或equals方法,并且需要保證equals方法滿足上述條件。