Java'da equals() metodu ne yapar?
sobes.tech yapay zeka
AI'dan gelen yanıt
Java'da equals() metodu, iki nesneyi eşitlik açısından karşılaştırmak için kullanılır. Varsayılan olarak, Object'ten miras alan ve üzerine yazılmamış nesneler durumunda, nesne referanslarını (==) karşılaştırır, yani değişkenlerin aynı bellek alanına işaret edip etmediğini kontrol eder.
equals() metodunun doğru şekilde yeniden tanımlanması, nesneleri içeriklerine göre karşılaştırmak için önemlidir, bellek konumlarına göre değil.
equals() metodunu yeniden tanımlarken aşağıdaki kurallara uyulmalıdır:
- Yansıtıcılık: Herhangi bir null olmayan nesne
xiçin,x.equals(x)truedöndürmelidir. - Simetri: Herhangi bir null olmayan nesne
xveyiçin, eğerx.equals(y)trueise,y.equals(x)detrueolmalıdır. - Transitivit: Herhangi bir null olmayan nesne
x,yveziçin, eğerx.equals(y)vey.equals(z)trueise,x.equals(z)detrueolmalıdır. - Tutarlılık: Herhangi bir null olmayan nesne
xveyiçin,x.equals(y)'yi tekrar tekrar çağırmak tutarlı sonuçlar vermelidir, bu arada karşılaştırma için kullanılan bilgiler değişmedikçe. - Herhangi bir null olmayan nesne
xiçin,x.equals(null)falsedöndürmelidir.
Genellikle, equals() metodunu yeniden tanımlarken, hashCode() metodunu da yeniden tanımlamak gerekir, ve şu kurala uyulmalıdır: Eğer iki nesne equals() metoduna göre eşitse, onların hashCode() tarafından döndürülen kodları da aynı olmalıdır. Tersine, aynı hash koduna sahip nesnelerin mutlaka eşit olması gerekmez.
Örnek yeniden tanımlama:
public class MyObject {
private int value;
private String name;
public MyObject(int value, String name) {
this.value = value;
this.name = name;
}
@Override
public boolean equals(Object o) {
// Karşılaştırma
if (this == o) return true;
// null ve sınıf kontrolü
if (o == null || getClass() != o.getClass()) return false;
// Tür dönüşümü ve alanlara göre karşılaştırma
MyObject myObject = (MyObject) o;
return value == myObject.value &&
Objects.equals(name, myObject.name);
}
@Override
public int hashCode() {
// Alanlara göre hash kodu üretimi
return Objects.hash(value, name);
}
// getterlar, setterlar vb.
}