Java'da equals() metodu ne yapar?
sobes.tech yapay zeka
AI'dan gelen yanıt
Java'da equals() metodu, iki nesnenin içeriğini karşılaştırmak için kullanılır. Varsayılan olarak, Object sınıfında, nesnelerin referanslarını karşılaştırır, yani iki değişkenin aynı bellek konumundaki nesneye işaret edip etmediğini belirler.
Ancak, Java'daki çoğu sınıf (örneğin, String, Integer) bu metodu, nesnelerin içeriğinde bulunan değerleri karşılaştıracak şekilde yeniden tanımlar, referanslar yerine.
equals() metodunu yeniden tanımlarken, sözleşmesine uygun hareket etmek önemlidir:
- Yansıtıcılık:
x.equals(x)herhangi bir null olmayanxiçintrueolmalıdır. - Simetrik:
x.equals(y)trueolmalı, eğer ve sadece eğery.equals(x)detrueise, herhangi bir null olmayanxveyiçin. - Transitivit: Eğer
x.equals(y)vey.equals(z)trueise,x.equals(z)detrueolmalıdır, herhangi bir null olmayanx,yveziçin. - Tutarlılık: Birden fazla
x.equals(y)çağrısı, nesneler değişmediği sürece aynı sonucu döndürmelidir. - Herhangi bir null olmayan
xiçin,x.equals(null)falseolmalıdır.
equals() metodunun yeniden tanımlanmasına örnek:
class MyObject {
private int value;
public MyObject(int value) {
this.value = value;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
MyObject myObject = (MyObject) obj;
return value == myObject.value;
}
}
equals() kullanımı:
// Referans karşılaştırması (varsayılan Object'te)
Object obj1 = new Object();
Object obj2 = new Object();
boolean referanslaKarsilastirma = obj1.equals(obj2); // false
// Değer karşılaştırması (`equals` yeniden tanımlandıktan sonra)
MyObject myObj1 = new MyObject(10);
MyObject myObj2 = new MyObject(10);
boolean degerleKarsilastirma = myObj1.equals(myObj2); // true
Ayrıca, equals() metodunu yeniden tanımlarken, hashCode() metodunu da yeniden tanımlamak önemlidir, böylece sözleşmeleri korunur ve HashMap, HashSet gibi hash tabanlı koleksiyonlarda sorunlar önlenir.