Junior
Java'da nesnelerin karşılaştırılması nasıl yapılır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Java'da nesne karşılaştırması, tam olarak neyin karşılaştırılacağına bağlı olarak birkaç farklı şekilde yapılır: nesne referansları veya nesne içeriği.
-
Referans karşılaştırması:
==operatörü: İki referansın aynı nesneye işaret edip etmediğini kontrol eder.
Object obj1 = new Object(); Object obj2 = new Object(); boolean areSameReference = (obj1 == obj2); // false, farklı nesneler Object obj3 = obj1; boolean areStillSameReference = (obj1 == obj3); // true, aynı nesneye referanslar -
İçerik karşılaştırması:
equals()metodu: Bu metodObjectsınıfında tanımlıdır ve varsayılan olarak referansları karşılaştırır. Ancak, sınıflar bu metodu içeriğe göre karşılaştırma yapmak üzere yeniden tanımlayabilir. Örneğin,String,Integer, koleksiyonlar (ArrayList,HashMap)equalsmetodunu değerleri veya öğeleri karşılaştırmak için yeniden tanımlar.
String str1 = new String("hello"); String str2 = new String("hello"); boolean areEqualContent = str1.equals(str2); // true, içerik aynı boolean areSameReferenceString = (str1 == str2); // false, farklı String nesneleri Integer int1 = 10; Integer int2 = 10; boolean areEqualIntegers = int1.equals(int2); // true boolean areSameReferenceInteger = (int1 == int2); // bu, Integer önbelleğe alma durumuna bağlı olarak true veya false olabilir, ancak equals kullanmak daha iyidirequals()metodunu yeniden tanımlarken,hashCode()metodunu da yeniden tanımlamak gerekir; aksi takdirde, sözleşmeye uyulmamış olur: Eğerobj1.equals(obj2)trueise,obj1.hashCode()veobj2.hashCode()eşit olmalıdır. Tersine, aynı hash kodlarına sahip nesnelerinequals()ile eşit olduğu garanti edilmez.
-
compareTo()veya karşılaştırıcılar kullanılarak karşılaştırma:Comparablearayüzü:compareTo(T other)metodunu tanımlar ve kendi sınıfındaki nesnelerin diğer nesnelerle karşılaştırılmasını sağlar. Negatif, sıfır veya pozitif değer döndürür, bu da nesnenin diğerine göre küçük, eşit veya büyük olduğunu gösterir.
public class MyObject implements Comparable<MyObject> { private int value; //... yapıcı ve getterlar @Override public int compareTo(MyObject other) { return Integer.compare(this.value, other.value); } }Comparatorarayüzü: Herhangi bir nesne için özel karşılaştırma mantığını tanımlamaya olanak tanır, hatta bu nesnelerComparableimplement etmese bile. Bu, farklı sıralama veya karşılaştırma mantıklarına ihtiyaç duyulduğunda veya orijinal sınıfı değiştirmek mümkün olmadığında kullanışlıdır.
import java.util.Comparator; public class MyObjectValueComparator implements Comparator<MyObject> { @Override public int compare(MyObject obj1, MyObject obj2) { return Integer.compare(obj1.getValue(), obj2.getValue()); } }
Karşılaştırma yöntemi seçimi, belirli göreve bağlıdır: nesnelerin kimliğini kontrol etmek için ==, içeriğin eşitliğini kontrol etmek için equals(), ve sıralama veya karmaşık karşılaştırmalar için Comparable/Comparator kullanılır.