Ի՞նչ է անում equals() մեթոդը Java-ում։
sobes.tech AI
Պատասխան AI-ից
Java- ում equals() մեթոդը օգտագործվում է երկու օբյեկտների հավասարությունը համեմատելու համար: Դեպքում, երբ օբյեկտները ժառանգում են Object-ից առանց դրա վերագրումի, այն համեմատում է հղումները օբյեկտների վրա (==), այսինքն՝ ստուգում է, արդյոք փոփոխականները ցույց են տալիս նույն հիշողության հատվածին:
Սխալ equals() մեթոդի վերագրումը կարևոր է օբյեկտների համեմատության համար ըստ դրանց բովանդակության, ոչ թե ըստ դրանց գտնվելու վայրի հիշողության մեջ:
equals()-ի վերագրումիս, անհրաժեշտ է հետևել հետևյալ կանոններին:
- Ինքնահամեմատություն: ցանկացած ոչ զրոյական
xօբյեկտի համար,x.equals(x)պետք է վերադարձնիtrue: - Սիմետրիկություն: ցանկացած
xևyոչ զրոյական օբյեկտների համար, եթեx.equals(y)վերադարձնում էtrue, ապա նաևy.equals(x)պետք է վերադարձնիtrue: - Տրանզիտություն: ցանկացած
x,y, ևzոչ զրոյական օբյեկտների համար, եթեx.equals(y)ևy.equals(z)երկուսն էլtrueեն, ապա նաևx.equals(z)պետք է վերադարձնիtrue: - Կոնսիստենտություն: ցանկացած
xևyոչ զրոյական օբյեկտների համար, բազմակի կանչերըx.equals(y)պետք է կայունորեն վերադարձնեն նույն արդյունքը, եթե տվյալները, որոնք օգտագործվում են համեմատության համար, չեն փոխվել: - Null-ի նկատմամբ անհամապատասխանություն: ցանկացած
xոչ զրոյական,x.equals(null)պետք է վերադարձնիfalse:
Սովորաբար, equals()-ի վերագրումից հետո, անհրաժեշտ է նաև վերագրել hashCode() մեթոդը՝ պահպանելով պայմանը, որ եթե երկու օբյեկտները հավասար են equals()-ով, ապա նրանց hashCode()-ները պետք է լինեն նույնը: Հակառակ դեպքում, դա պարտադիր չէ:
Նմուշ՝ equals()-ի վերագրում:
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) {
// Համեմատություն
if (this == o) return true;
// Ստուգում null-ի և տիպի
if (o == null || getClass() != o.getClass()) return false;
// Տիպի փոխակերպում և համեմատություն ըստ դաշտերի
MyObject myObject = (MyObject) o;
return value == myObject.value &&
Objects.equals(name, myObject.name);
}
@Override
public int hashCode() {
// Հաշվարկում hashCode ըստ դաշտերի
return Objects.hash(value, name);
}
// getter-ներ, setter-ներ և այլն
}