logo

Како упоредити два објекта у Јави

Јава Објецт цласс је супер класа свих Јава класа. Све Јава класе подразумевано имплементирају класу Објецт. Класа Јава Објецт пружа две важне методе за упореди два објеката у Јави , тј. једнако() и хасхЦоде() методом. У овом одељку ћемо научити како једнако() и хасхЦоде() метода ради. Уз ово ћемо и научити како упоредити два објекта у Јави са правим примерима.

Јава пружа две методе класе Објецт за поређење објеката као што следи:

  • Метод Јава екуалс().
  • Јава хасхЦоде() метода

Метод Јава екуалс().

Тхе једнако() метод класе Објецт упореди једнакост два објекта. Два објекта ће бити једнака ако деле исту меморијску адресу.

Синтакса:

 public boolean equals(Object obj) 

Метод анализира референтни објекат као параметар. Враћа тачно ако су објекти једнаки, иначе враћа нетачно.

шта је кошница

Такође је могуће да је објекат једнак другом датом објекту, а затим следи метода екуалс(). однос еквиваленције да упореди предмете.

    Рефлексиван:Ако Икс је референца која није нула, позивање оф к.једнако(к) мора вратити труе.симетрично:Ако су две референце које нису нулте Икс и и, к.једнако(и) ће се вратити истина ако и само ако и.једнако(к) повратак истина .прелазно:Ако су три референце које нису нулте к,и , и з, к.једнако(з) такође ће се вратити истина ако к.једнако(и ) и и.једнако(з) оба се враћају истина .Доследан:Ако су две референце које нису нулте Икс и и , вишеструко позивање на к.једнако(и) стално враћа тачно или нетачно. Не пружа никакве информације које се користе у поређењу.
  • За било коју референцу која није нула к, к.једнако(нулл) враћа фалсе.

Укратко, за било коју референцу која није нула рецимо Икс и и , враћа тачно ако и само ако се обе референце односе на исти објекат.

Запамтити: Када поништимо методу екуалс(), неопходно је заменити метод хасхЦоде(). Надјачавање следи конвенцију за метод хасхЦоде() који каже да једнаки објекат мора имати једнак хеш код.

Пример методе екуалс().

У следећем примеру смо креирали конструктор од Двоструко и Дуго класе и прослеђује одговарајуће вредности, као аргумент који се чува у њиховим објектима, респективно.

Након тога, у првој изјави принтлн, позвали смо метод екуалс() и анализирали објекат и као параметар који упоређује објекат к и и. Враћа се лажно јер к држи двоструку вредност, а и дугу вредност која није једнака.

Слично томе, у другој изјави принтлн, позвали смо метод екуалс() и анализирали исту вредност као у конструктору класе Доубле. Враћа се истина јер објекат двоструке класе, тј. к, има исту вредност коју смо пренели у методу екуалс().

ОбјецтЦомпарисонЕкампле.јава

замењивање метода у Јави
 public class ObjectComparisonExample { public static void main(String[] args) { //creating constructor of the Double class Double x = new Double(123.45555); //creating constructor of the Long class Long y = new Long(9887544); //invoking the equals() method System.out.println('Objects are not equal, hence it returns ' + x.equals(y)); System.out.println('Objects are equal, hence it returns ' + x.equals(123.45555)); } } 

Излаз:

 Objects are not equal, hence it returns false Objects are equal, hence it returns true 

Разлика између оператора == и метода екуалс().

Ин Јава , тхе == оператор упоређује да ли су две референце идентичне или не. Док је једнако() метода упоређује два објекта.

Објекти су једнаки када имају исто стање (обично упоређивање променљивих). Објекти су идентичне када деле класни идентитет.

На пример, израз обј1==обј2 тестира идентитет, а не једнакост. Док је израз обј1.једнако(обј2) упоређује једнакост.

Јава хасхЦоде() метода

У Јави, хеш код је 32-битна потписана целобројна вредност. То је јединствени ИД који обезбеђује ЈВМ на Јава објекат. Сваки Јава објекат је повезан са хеш кодом. Хеш кодом управља структура података заснована на хеш, као што су ХасхТабле, ХасхСет, итд.

форматирање стрингова јава

Запамтити: Када заобиђемо метод екуалс(), потребно је да заобиђемо и метод хасхЦоде().

Синтакса:

 public int hashCode() 

Враћа насумично генерисану вредност хеш кода објекта који је јединствен за сваку инстанцу. Насумично генерисана вредност може да се промени током неколико извршавања програма.

Општи уговор за хасхЦоде је:

  • Када се позове више пута током извршавања апликације, метода хасхЦоде() ће доследно враћати исти хеш код (целобројна вредност). Имајте на уму да објекат не треба мењати.
  • Ако су два објекта једнака према методи екуалс(), онда позивање методе хасхЦоде() на ова два објекта мора произвести исту целобројну вредност.
  • Није неопходно да ако су два објекта неједнака у складу са методом екуалс(), онда позивање методе хасхЦоде() на ова два објекта може произвести различиту целобројну вредност. То значи да може произвести исти хеш код за оба објекта.

Пример методе хасхЦоде().

У следећем примеру смо креирали две класе Емплоиее.јава и ХасхЦодеЕкампле.јава .

У класи Емплоиее дефинисали смо два поља регно типа инт и име типа Стринг. Након тога, креирали смо конструктор класе Емплоиее и проследили смо ова два поља као параметар.

Да бисмо извршили поређење објеката, креирали смо посебну класу под називом ХасхЦодеЕкампле . У овој класи смо креирали две инстанце класе Емплоиее, тј. емп1 и емп2 . Након тога, позвали смо метод хасхЦоде() користећи објекте. Вредност хеш кода смо сачували у променљивој а и б , редом.

Емплоиее.јава

 public class Employee { private int regno; private String name; //constructor of Employee class public Employee(int regno, String name) { this.name = name; this.regno = regno; } public int getRegno() { return regno; } public void setRegno(int Regno) { this.regno = regno; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 

ХасхЦодеЕкампле.јава

 public class HashcodeExample { public static void main(String[] args) { //creating two instances of the Employee class Employee emp1 = new Employee(918, 'Maria'); Employee emp2 = new Employee(918, 'Maria'); //invoking hashCode() method int a=emp1.hashCode(); int b=emp2.hashCode(); System.out.println('hashcode of emp1 = ' + a); System.out.println('hashcode of emp2 = ' + b); System.out.println('Comparing objects emp1 and emp2 = ' + emp1.equals(emp2)); } } 

Излаз:

претворити стринг у јсонобјецт јава
 hashcode of emp1 = 2398801145 hashcode of emp2 = 1852349007 Comparing objects emp1 and emp2 = false 

Надјачавање методе екуалс().

Методу екуалс() можемо заменити на следећи начин ако желимо да обезбедимо сопствену имплементацију.

 //overriding equals() method @Override public boolean equals(Object obj) { if (obj == null) return false; if (obj == this) return true; return this.getRegno() == ((Employee) obj). getRegno(); } 

Горњи исечак кода показује да ће два запослена бити једнака ако су ускладиштени на истој меморијској адреси или имају исти регно. Када покренемо програм (ХасхЦодеЕкампле.јава) са горњим исечком кода, добијамо следећи излаз.

Излаз:

 hashcode of emp1 = 2032578917 hashcode of emp2 = 1531485190 Comparing objects emp1 and emp2 = true