Junior
Kā Java valodā tiek veikta objektu salīdzināšana?
sobes.tech AI
Atbilde no AI
Java valkā objektu salīdzināšanai vairākus veidus, atkarībā no tā, ko tieši nepieciešams salīdzināt: atsauces uz objektu vai objektu saturu.
-
Atsauces salīdzināšana:
- Operator
==: Pārbauda, vai abas atsauces norāda uz vienu un to pašu objektu atmiņā.
Object obj1 = jauns Object(); Object obj2 = jauns Object(); boolean irVienādaAtsauce = (obj1 == obj2); // false, dažādi objekti Object obj3 = obj1; boolean irVēlVienādaAtsauce = (obj1 == obj3); // true, atsauces uz vienu objektu - Operator
-
Satura salīdzināšana:
- Metode
equals(): Šī metode ir definētaObjectklasē un pēc noklusējuma arī salīdzina atsauces. Tomēr klases var pārdefinēt šo metodi, lai realizētu salīdzināšanu pēc satura. Piemēram,String,Integer, kolekcijas (kāArrayList,HashMap) pārdefinēequals, lai salīdzinātu vērtības vai elementus.
String str1 = jauns String("hello"); String str2 = jauns String("hello"); boolean irVienādsSaturs = str1.equals(str2); // true, saturs ir vienāds boolean irVēlAizvienVienādaAtsauce = (str1 == str2); // false, dažādi objekti String Integer int1 = 10; Integer int2 = 10; boolean irVienādiSkaitļi = int1.equals(int2); // true boolean irVēlAizvienVienādaAtsauceInteger = (int1 == int2); // var būt true vai false atkarībā no Integer kešatmiņas, bet ieteicams izmantot equals- Pārdefinējot
equals(), obligāti jāpārdefinē arīhashCode(), lai ievērotu kontraktu: jaobj1.equals(obj2)irtrue, tadobj1.hashCode()ir jābūt vienādam arobj2.hashCode(). Atgriešanās noteikums neattiecas: vienādi hash kodi nenodrošina objektu vienādību pēcequals().
- Metode
-
Salīdzināšana ar
compareTo()vai salīdzinātājiem:- Interfeiss
Comparable: Definē metodicompareTo(T other), kas ļauj objektiem savā klasē salīdzināt sevi ar citiem šīs pašas klases objektiem. Atgriež negatīvu, nulles vai pozitīvu vērtību, norādot, vai objekts ir mazāks, vienāds vai lielāks par salīdzināmo objektu.
publiskā klase MyObject implementē Comparable<MyObject> { privāts int vērtība; //... konstruktors un geteri @Override publiskā int compareTo(MyObject cits) { return Integer.compare(this.vērtība, cits.vērtība); } }- Interfeiss
Comparator: ļauj definēt lietotāja pielāgotu salīdzināšanas loģiku jebkurām objektiem, pat ja tie neimplementēComparable. Tas ir noderīgi, ja nepieciešama dažāda kārtošanas vai salīdzināšanas loģika vienam un tam pašam klasei, vai ja nav iespējams mainīt sākotnējo klasi.
import java.util.Comparator; publiskā klase MyObjectValueComparator implementē Comparator<MyObject> { @Override publiskā int compare(MyObject obj1, MyObject obj2) { return Integer.compare(obj1.getVērtība(), obj2.getVērtība()); } } - Interfeiss
Izvēle salīdzināšanas metodei ir atkarīga no konkrētās uzdevuma: == pārbauda objektu identitāti, equals() pārbauda satura vienādību, un Comparable/Comparator nosaka kārtību vai veic sarežģītākus salīdzinājumus.