1. Java рдордзреАрд▓ рд╡рд╕реНрддреВрдВрдЪреА рддреБрд▓рдирд╛ рдХрд░рдгреЗ

Java рдордзреНрдпреЗ, рд╡рд╕реНрддреВрдВрдЪреА рддреБрд▓рдирд╛ рд╕рдВрджрд░реНрдн рдЖрдгрд┐ рдореВрд▓реНрдпрд╛рдиреБрд╕рд╛рд░ рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ.

рд╕рдВрджрд░реНрднрд╛рдВрдЪреА рддреБрд▓рдирд╛

рдЬрд░ рджреЛрди рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдореЗрдорд░реАрдордзреНрдпреЗ рдПрдХрд╛рдЪ рдСрдмреНрдЬреЗрдХреНрдЯрдХрдбреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд░рддрд╛рдд, рддрд░ рдпрд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рд╕рдВрджрд░реНрдн рд╕рдорд╛рди рдЕрд╕рддрд╛рдд. рдЬрд░ рддреБрдореНрд╣реА рд╕рдорд╛рдирддрд╛ рдСрдкрд░реЗрдЯрд░ ( ==) рд╡рд╛рдкрд░реВрди рдпрд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдЪреА рддреБрд▓рдирд╛ рдХреЗрд▓реА рддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рддреНрдп рдорд┐рд│реЗрд▓ рдЖрдгрд┐ рддреЛ рдкрд░рд┐рдгрд╛рдо рдЕрд░реНрдердкреВрд░реНрдг рдЖрд╣реЗ. рдпреЗрдереЗ рд╕рд░реНрд╡ рдХрд╛рд╣реА рд╕реЛрдкреЗ рдЖрд╣реЗ.

рдХреЛрдб рдХрдиреНрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ
Integer a = 5;
Integer b = a;
System.out.println(a == b);


true

рдореВрд▓реНрдпрд╛рдиреБрд╕рд╛рд░ рддреБрд▓рдирд╛ рдХрд░рдгреЗ

рдкрд░рдВрддреБ рдЖрдкрдг рдЕрдиреЗрдХрджрд╛ рдЕрд╢рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдВрдирд╛ рд╕рд╛рдореЛрд░реЗ рдЬрд╛рдК рд╢рдХрддрд╛ рдЬрд┐рдереЗ рджреЛрди рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдПрдХрд╕рд╛рд░рдЦреНрдпрд╛ рджреЛрди рднрд┐рдиреНрди рд╡рд╕реНрддреВрдВрдЪрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛рдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рджреЛрди рднрд┐рдиреНрди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЬреНрдпрд╛рдд рд╕рдорд╛рди рдордЬрдХреВрд░ рдЖрд╣реЗ.

рднрд┐рдиреНрди рд╡рд╕реНрддреВ рдПрдХрд╕рд╛рд░рдЦреНрдпрд╛ рдЖрд╣реЗрдд рдХреА рдирд╛рд╣реА рд╣реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, equals()рдкрджреНрдзрдд рд╡рд╛рдкрд░рд╛. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде:

рдХреЛрдб рдХрдиреНрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ
String a = new String("Hello");
String b = new String("Hello");
System.out.println(a == b);
System.out.println(a.equals(b));


false
true

рдкрджреНрдзрдд equalsрд╡рд░реНрдЧрд╛рдкреБрд░рддреА рдорд░реНрдпрд╛рджрд┐рдд рдирд╛рд╣реА String. рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧрд╛рдХрдбреЗ рдЖрд╣реЗ.

рддреБрдореНрд╣реА рд╕реНрд╡рдд: рд▓рд┐рд╣рд┐рддрд╛ рдЕрд╕реЗ рд╡рд░реНрдЧ рджреЗрдЦреАрд▓, рдЖрдгрд┐ рдпрд╛рдЪреЗ рдХрд╛рд░рдг рдпреЗрдереЗ рдЖрд╣реЗ.



2. Objectрд╡рд░реНрдЧ

Java рдордзреАрд▓ рд╕рд░реНрд╡ рд╡рд░реНрдЧрд╛рдВрдирд╛ Objectрд╡рд░реНрдЧрд╛рдЪрд╛ рд╡рд╛рд░рд╕рд╛ рдорд┐рд│рддреЛ. рдЬрд╛рд╡рд╛рдЪреНрдпрд╛ рдирд┐рд░реНрдорд╛рддреНрдпрд╛рдВрдиреА рд╣рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрди рд╢реЛрдзреВрди рдХрд╛рдврд▓рд╛.

рдЖрдгрд┐ рдЬрд░ рдПрдЦрд╛рджреНрдпрд╛ рд╡рд░реНрдЧрд╛рд▓рд╛ Objectрд╡рд░реНрдЧрд╛рдЪрд╛ рд╡рд╛рд░рд╕рд╛ рдорд┐рд│рд╛рд▓рд╛ рддрд░ рддреЛ рд╡рд░реНрдЧрд╛рдЪреНрдпрд╛ рд╕рд░реНрд╡ рдкрджреНрдзрддреА рдорд┐рд│рд╡рддреЛ Object. рдЖрдгрд┐ рд╣рд╛ рд╡рд╛рд░рд╕рд╛рд╣рдХреНрдХрд╛рдЪрд╛ рдПрдХ рдореЛрдард╛ рдкрд░рд┐рдгрд╛рдо рдЖрд╣реЗ.

рджреБрд╕рд▒реНрдпрд╛ рд╢рдмреНрджрд╛рдВрдд, рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧрд╛рдХрдбреЗ рд╡рд░реНрдЧрд╛рдЪреНрдпрд╛ рдкрджреНрдзрддреА рдЕрд╕рддрд╛рдд Object, рдЬрд░реА рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдХреЛрдбрдордзреНрдпреЗ рддреНрдпрд╛рдВрдЪрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╕рд▓рд╛ рддрд░реАрд╣реА.

рдпрд╛ рд╡рд╛рд░рд╢рд╛рдиреЗ рдорд┐рд│рд╛рд▓реЗрд▓реНрдпрд╛ рдкрджреНрдзрддреАрдВрдордзреНрдпреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рддреБрд▓рдирд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдкрджреНрдзрддреАрдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рд╣реЛрддреЛ. рдпрд╛ equals()рдЖрдгрд┐ hashCode()рдкрджреНрдзрддреА рдЖрд╣реЗрдд.

рдХреЛрдб рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд, рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдХрд╛рдп рдЕрд╕реЗрд▓ рддреЗ рдпреЗрдереЗ рдЖрд╣реЗ:
class Person
{
   String name;
   int age;
}
class Person extends Object
{
   String name;
   int age;

   public boolean equals(Object obj)
   {
      return this == obj;
   }

   public int hashCode()
   {
      return address_of_object_in_memory; // This is the default implementation, but there may be a different implementation
   }
}

рд╡рд░реАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдордзреНрдпреЗ, рдЖрдореНрд╣реА Personрдирд╛рд╡ рдЖрдгрд┐ рд╡рдп рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рд╕рд╣ рдПрдХ рд╕рд╛рдзрд╛ рд╡рд░реНрдЧ рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдПрдХрдЪ рдкрджреНрдзрдд рдирд╛рд╣реА. рдкрд░рдВрддреБ рд╕рд░реНрд╡ рд╡рд░реНрдЧрд╛рдВрдирд╛ Objectрд╡рд░реНрдЧрд╛рдЪрд╛ рд╡рд╛рд░рд╕рд╛ рдорд┐рд│рдд рдЕрд╕рд▓реНрдпрд╛рдиреЗ, Personрд╡рд░реНрдЧрд╛рдд рдЖрдкреЛрдЖрдк рджреЛрди рдкрджреНрдзрддреА рдЖрд╣реЗрдд:

рдкрджреНрдзрдд рд╡рд░реНрдгрди
boolean equals(Object obj)
рд╡рд░реНрддрдорд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдгрд┐ рдкрд╛рд╕ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрдЪреА рддреБрд▓рдирд╛ рдХрд░рддреЗ
int hashCode()
рд╡рд░реНрддрдорд╛рди рдСрдмреНрдЬреЗрдХреНрдЯрдЪрд╛ рд╣реЕрд╢рдХреЛрдб рдкрд░рдд рдХрд░рддреЛ

рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА рдкреВрд░реНрдгрдкрдгреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреВрдЪреА equalsрдкрджреНрдзрдд рдЕрд╕рддреЗ рдЖрдгрд┐ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рд╡рд╕реНрддреВрдВрдЪреА рдПрдХрдореЗрдХрд╛рдВрд╢реА рддреБрд▓рдирд╛ рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ. рдЕрд╕рд╛ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрд▓ рдЖрдгрд┐ рдЙрддреНрддрдо рдкреНрд░рдХрд╛рд░реЗ рдХрд╛рд░реНрдп рдХрд░реЗрд▓.

рдХреЛрдб рдХрдиреНрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ
Integer a = 5;
String s = "Hello";
System.out.println(a.equals(s));
System.out.println(s.equals(a));


false
false
Object a = new Integer(5);
Object b = new Integer(5);
System.out.println(a.equals(b)) ;


true

3. equals()рдкрджреНрдзрдд

equals()рдХреНрд▓рд╛рд╕рдордзреВрди рд╡рд╛рд░рд╕рд╛ рдорд┐рд│рд╛рд▓реЗрд▓реА рдкрджреНрдзрдд , Objectрд╡рд░реНрддрдорд╛рди рдСрдмреНрдЬреЗрдХреНрдЯрдЪреА рдЙрддреНрддреАрд░реНрдг рд╡рд╕реНрддреВрдВрд╢реА рддреБрд▓рдирд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкрд╛ рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рд▓рд╛рдЧреВ рдХрд░рддреЗ: рддреА рдлрдХреНрдд рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдЪреНрдпрд╛ рд╕рдВрджрд░реНрднрд╛рдВрдЪреА рддреБрд▓рдирд╛ рдХрд░рддреЗ.

PersonрдЬрд░ рддреБрдореНрд╣реА рдкрджреНрдзрдд рдХреЙрд▓ рдХрд░рдгреНрдпрд╛рдРрд╡рдЬреА рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдЪреА рддреБрд▓рдирд╛ рдХреЗрд▓реА рддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдорд┐рд│реЗрд▓ equals(). рдЙрджрд╛рд╣рд░рдг:

рдХреЛрдб рдХрдиреНрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ
Person a = new Person();
a.name = "Steve";

Person b = new Person();
b.name = "Steve";

System.out.println(a == b);
System.out.println(a.equals(b));






false
false

рдЬреЗрд╡реНрд╣рд╛ equalsрдкрджреНрдзрдд рдСрди рдХреЗрд▓реА рдЬрд╛рддреЗ a, рддреЗрд╡реНрд╣рд╛ рддреЗ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рдВрджрд░реНрднрд╛рдЪреА aрд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдордзреНрдпреЗ рд╕рдВрдЪрдпрд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рдВрджрд░реНрднрд╛рд╢реА рддреБрд▓рдирд╛ рдХрд░рддреЗ b.

рддрдерд╛рдкрд┐, рд╡рд░реНрдЧрд╛рд╕рд╛рдареА рддреБрд▓рдирд╛ рд╡реЗрдЧрд│реНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ String. рдХрд╛?

рдХрд╛рд░рдг рд╡рд░реНрдЧ рддрдпрд╛рд░ рдХрд░рдгрд╛рд░реНтАНрдпрд╛рдВрдиреА Stringрд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдкрджреНрдзрддреАрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд▓рд┐рд╣рд┐рд▓реА equals().

equals()рдкрджреНрдзрддреАрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА

рдЖрддрд╛ рд╡рд░реНрдЧрд╛рдд рд╕рдорд╛рди рдкрджреНрдзрддреАрдЪреА рд╕реНрд╡рддрдГрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд▓рд┐рд╣реВ Person. рдЖрдореНрд╣реА 4 рдореБрдЦреНрдп рдкреНрд░рдХрд░рдгрд╛рдВрдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реВ.

рдорд╣рддреНрд╡рд╛рдЪреЗ:
рдХреЛрдгрддрд╛ рд╡рд░реНрдЧ equalsрдкрджреНрдзрдд рдУрд╡реНрд╣рд░рд░рд╛рдЗрдб рдХрд░рддреЛ рдпрд╛рдЪреА рдкрд░реНрд╡рд╛ рди рдХрд░рддрд╛, рддреЗ рдиреЗрд╣рдореА рдПрдЦрд╛рджреНрдпрд╛ Objectрд╡рд╕реНрддреВрд▓рд╛ рдпреБрдХреНрддрд┐рд╡рд╛рдж рдореНрд╣рдгреВрди рдШреЗрддреЗ

рдкрд░рд┐рд╕реНрдерд┐рддреА 1 : рдЬреНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрд╡рд░ рдореЗрдердб equalsрдХреЙрд▓ рдХреЗрд▓реА рдЬрд╛рддреЗ рддреАрдЪ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдердбрд▓рд╛ рджреЗрдЦреАрд▓ рджрд┐рд▓реА рдЬрд╛рддреЗ equals. рд╡рд░реНрддрдорд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдгрд┐ рдкрд╛рд╕ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрдЪреЗ рд╕рдВрджрд░реНрдн рд╕рдорд╛рди рдЕрд╕рд▓реНрдпрд╛рд╕, рдкрджреНрдзрдд рдкрд░рдд рдпреЗрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ true. рдПрдЦрд╛рджреА рд╡рд╕реНрддреВ рд╕реНрд╡рддрдГ рд╕рд╛рд░рдЦреА рдЕрд╕рддреЗ.

рдХреЛрдбрдордзреНрдпреЗ рддреЗ рдЕрд╕реЗ рджрд┐рд╕реЗрд▓:

рдХреЛрдб рд╡рд░реНрдгрди
public boolean equals(Object obj)
{
   if (this == obj)
    return true;

   // The rest of the code of the equals method
}


рд╕рдВрджрд░реНрднрд╛рдВрдЪреА рддреБрд▓рдирд╛ рдХрд░рд╛

рдкрд░рд┐рд╕реНрдерд┐рддреА 2 : nullрдкрджреНрдзрддреАрдХрдбреЗ рдкрд╛рдард╡рд▓реЗ рдЬрд╛рддреЗ equals- рдЖрдордЪреНрдпрд╛рдХрдбреЗ рддреБрд▓рдирд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд╛рд╣реАрд╣реА рдирд╛рд╣реА. рдЬреНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрд╡рд░ рдкрджреНрдзрдд рдХреЙрд▓ рдХреЗрд▓реА рдЬрд╛рддреЗ рддреА рдирд┐рд╢реНрдЪрд┐рддрдкрдгреЗ рд╢реВрдиреНрдп рдирд╛рд╣реА, рдореНрд╣рдгреВрди рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд equalsрдкрд░рдд рдпреЗрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ .false

рдХреЛрдбрдордзреНрдпреЗ рддреЗ рдЕрд╕реЗ рджрд┐рд╕реЗрд▓:

рдХреЛрдб рд╡рд░реНрдгрди
public boolean equals(Object obj)
{
   if (this == obj)
      return true;

   if (obj == null)
      return false;

   // The rest of the code of the equals method
}


рд╕рдВрджрд░реНрднрд╛рдВрдЪреА рддреБрд▓рдирд╛ рдХрд░рд╛


рдкрд╛рд╕ рдХреЗрд▓реЗрд▓реА рд╡рд╕реНрддреВ рдЖрд╣реЗ рдХрд╛ null?

рдкрд░рд┐рд╕реНрдерд┐рддреА 3 : рдПрдХ рдирд╕рд▓реЗрд▓реНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрдЪрд╛ рд╕рдВрджрд░реНрдн PersonрдкрджреНрдзрддреАрдХрдбреЗ рдкрд╛рдард╡рд▓рд╛ рдЬрд╛рддреЛ equals. Personрд╡рд╕реНрддреВ рдиреЙрди-рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд╛рд░рдЦреА рдЖрд╣реЗ рдХрд╛ Person? рд╡рд░реНрдЧрд╛рдЪреНрдпрд╛ рд╡рд┐рдХрд╛рд╕рдХрд╛рдиреЗ PersonрддреНрдпрд╛рд▓рд╛ рдХрд┐рдВрд╡рд╛ рддрд┐рд▓рд╛ рд╣рд╡реЗ рддрд╕реЗ рдард░рд╡рд╛рдпрдЪреЗ рд╣рд╛ рдкреНрд░рд╢реНрди рдЖрд╣реЗ.

рдкрд░рдВрддреБ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рд╕рдорд╛рди рд╕рдордЬрдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╕реНрддреВ рд╕рдорд╛рди рд╡рд░реНрдЧрд╛рдЪреНрдпрд╛ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдореНрд╣рдгреВрди, рдЬрд░ рд╡рд░реНрдЧрд╛рддреАрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд╣реАрддрд░реА PersonрдЖрдордЪреНрдпрд╛ рд╕рдорд╛рди рдкрджреНрдзрддреАрдордзреНрдпреЗ рдкрд╛рд╕ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ, рддрд░ рдЖрдореНрд╣реА рдиреЗрд╣рдореА рдкрд░рдд рдпреЗрдК false. рддреБрдореНрд╣реА рдПрдЦрд╛рджреНрдпрд╛ рд╡рд╕реНрддреВрдЪрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╕рд╛ рддрдкрд╛рд╕реВ рд╢рдХрддрд╛? рддреЗ рдмрд░реЛрдмрд░ рдЖрд╣реЗ тАФ рдСрдкрд░реЗрдЯрд░ рд╡рд╛рдкрд░реВрди instanceof.

рдЖрдордЪрд╛ рдирд╡реАрди рдХреЛрдб рдХрд╕рд╛ рджрд┐рд╕рддреЛ рддреЗ рдпреЗрдереЗ рдЖрд╣реЗ:

рдХреЛрдб рд╡рд░реНрдгрди
public boolean equals(Object obj)
{
   if (this == obj)
      return true;

   if (obj == null)
      return false;

   if (!(obj instanceof Person))
      return false;

   // The rest of the code of the equals method
}


рд╕рдВрджрд░реНрднрд╛рдВрдЪреА рддреБрд▓рдирд╛ рдХрд░рд╛


рдкрд╛рд╕ рдХреЗрд▓реЗрд▓реА рд╡рд╕реНрддреВ рдЖрд╣реЗ рдХрд╛ null?


рдЙрддреНрддреАрд░реНрдг рд╡рд╕реНрддреВ рдирд╕рд▓реНрдпрд╛рд╕ рдЕPerson

4. рджреЛрди Personрд╡рд╕реНрддреВрдВрдЪреА рддреБрд▓рдирд╛ рдХрд░рдгреЗ

рдЖрдореНрд╣реА рдХрд╛рдп рд╕рдВрдкрд▓реЗ? рдЬрд░ рдЖрдкрдг рдкрджреНрдзрддреАрдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА рдкреЛрд╣реЛрдЪрд▓реЛ, рддрд░ рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ PersonрдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдВрджрд░реНрдн рдЖрд╣реЗ рдЬреЛ рдирд╛рд╣реА null. рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рддреЗ a рдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддреЛ PersonрдЖрдгрд┐ рджреЛрдиреНрд╣реА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдЪреНрдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдВрддрд░реНрдЧрдд рдбреЗрдЯрд╛рдЪреА рддреБрд▓рдирд╛ рдХрд░рддреЛ. рдЖрдгрд┐ рд╣реА рдЖрдордЪреА рдЪреМрдереА рдкрд░рд┐рд╕реНрдерд┐рддреА рдЖрд╣реЗ .

рдХреЛрдб рд╡рд░реНрдгрди
public boolean equals(Object obj)
{
   if (this == obj)
      return true;

   if (obj == null)
      return false;

   if (!(obj instanceof Person))
      return false;

   Person person = (Person) obj;

   // The rest of the code of the equals method
}


рд╕рдВрджрд░реНрднрд╛рдВрдЪреА рддреБрд▓рдирд╛ рдХрд░рд╛


рдкрд╛рд╕ рдХреЗрд▓реЗрд▓реА рд╡рд╕реНрддреВ рдЖрд╣реЗ рдХрд╛ null? рдкрд╛рд╕ рдХреЗрд▓реЗрд▓реА рдСрдмреНрдЬреЗрдХреНрдЯ рдЯрд╛рдпрдкрдХрд╛рд╕реНрдЯрд┐рдВрдЧ


рдирд╕рд▓реНрдпрд╛рд╕Person


рдЖрдгрд┐ рддреБрдореНрд╣реА рджреЛрди рд╡рд╕реНрддреВрдВрдЪреА рддреБрд▓рдирд╛ рдХрд╢реА рдХрд░рд╛рд▓ Person? рддреНрдпрд╛рдВрдЪреЗ рдирд╛рд╡ ( name) рдЖрдгрд┐ рд╡рдп ( age) рд╕рдорд╛рди рдЕрд╕рд▓реНрдпрд╛рд╕ рддреЗ рд╕рдорд╛рди рдЖрд╣реЗрдд. рдЕрдВрддрд┐рдо рдХреЛрдб рдЕрд╕реЗ рджрд┐рд╕реЗрд▓:

рдХреЛрдб рд╡рд░реНрдгрди
public boolean equals(Object obj)
{
   if (this == obj)
      return true;

   if (obj == null)
      return false;

   if (!(obj instanceof Person))
      return false;

   Person person = (Person) obj;

   return this.name == person.name && this.age == person.age;
}


рд╕рдВрджрд░реНрднрд╛рдВрдЪреА рддреБрд▓рдирд╛ рдХрд░рд╛


рдкрд╛рд╕ рдХреЗрд▓реЗрд▓реА рд╡рд╕реНрддреВ рдЖрд╣реЗ рдХрд╛ null? рдкрд╛рд╕ рдХреЗрд▓реЗрд▓реА рдСрдмреНрдЬреЗрдХреНрдЯ рдЯрд╛рдпрдкрдХрд╛рд╕реНрдЯрд┐рдВрдЧ


рдирд╕рд▓реНрдпрд╛рд╕Person


рдкрдг рдПрд╡рдвреЗрдЪ рдирд╛рд╣реА.

рдкреНрд░рдердо, рдирд╛рд╡ рдлреАрд▓реНрдб a рдЖрд╣реЗ String, рдореНрд╣рдгреВрди рддреБрдореНрд╣рд╛рд▓рд╛ рдкрджреНрдзрдд рдХреЙрд▓ рдХрд░реВрди рдирд╛рд╡ рдлреАрд▓реНрдбрдЪреА рддреБрд▓рдирд╛ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ equals.

this.name.equals(person.name)

рджреБрд╕рд░реЗ, nameрдлреАрд▓реНрдб рдЕрд╕реВ рд╢рдХрддреЗ null: рддреНрдпрд╛ рдмрд╛рдмрддреАрдд, рдЖрдкрдг equalsрддреНрдпрд╛рд╡рд░ рдХреЙрд▓ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА. рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдпрд╛рд╕рд╛рдареА рдЕрддрд┐рд░рд┐рдХреНрдд рддрдкрд╛рд╕рдгреА рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ null:

this.name != null && this.name.equals(person.name)

рддреЗ рдореНрд╣рдгрд╛рд▓реЗ, рдЬрд░ рдирд╛рд╡ рдлреАрд▓реНрдб nullрджреЛрдиреНрд╣реА Personрд╡рд╕реНрддреВрдВрдордзреНрдпреЗ рдЕрд╕реЗрд▓, рддрд░ рдирд╛рд╡реЗ рдЕрджреНрдпрд╛рдк рд╕рдорд╛рди рдЖрд╣реЗрдд.

рдЪреМрдереНрдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдЪрд╛ рдХреЛрдб рдХрджрд╛рдЪрд┐рдд рдпрд╛рд╕рд╛рд░рдЦрд╛ рджрд┐рд╕реВ рд╢рдХреЗрд▓:

Person person = (Person) obj;

if (this.age != person.age)
   return false;

if (this.name == null)
   return person.name == null;

return this.name.equals(person.name);


рд╡рдпреЛрдЧрдЯ рд╕рдорд╛рди рдирд╕рд▓реНрдпрд╛рд╕,
рд▓рдЧреЗрдЪ return false

рдЬрд░ this.nameрд╕рдорд╛рди рдЕрд╕реЗрд▓ рддрд░ null, рдкрджреНрдзрдд рд╡рд╛рдкрд░реВрди рддреБрд▓рдирд╛ рдХрд░рдгреНрдпрд╛рдд рдХрд╛рд╣реА рдЕрд░реНрде рдирд╛рд╣реА equals. рдпреЗрдереЗ рдПрдХрддрд░ рджреБрд╕рд░реЗ nameрдлреАрд▓реНрдб рд╕рдорд╛рди рдЖрд╣реЗ nullрдХрд┐рдВрд╡рд╛ рддреЗ рдирд╛рд╣реА.

рдкрджреНрдзрдд рд╡рд╛рдкрд░реВрди рджреЛрди рдирд╛рд╡ рдлреАрд▓реНрдбрдЪреА рддреБрд▓рдирд╛ рдХрд░рд╛ equals.


5. hashCode()рдкрджреНрдзрдд

equalsрджреЛрдиреНрд╣реА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдЪреНрдпрд╛ рд╕рд░реНрд╡ рдлреАрд▓реНрдбрдЪреА рддрдкрд╢реАрд▓рд╡рд╛рд░ рддреБрд▓рдирд╛ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЙрджреНрджреЗрд╢рд╛рдиреЗ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкрджреНрдзрддреАрд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЖрдгрдЦреА рдПрдХ рдкрджреНрдзрдд рдЖрд╣реЗ рдЬреА рдЕрд╕реНрдкрд╖реНрдЯ рдкрд░рдВрддреБ рдЕрддрд┐рд╢рдп рджреНрд░реБрдд рддреБрд▓рдирд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реА рдЬрд╛рдК рд╢рдХрддреЗ : hashCode().

рдХрд▓реНрдкрдирд╛ рдХрд░рд╛ рдХреА рддреБрдореНрд╣реА рдЕрдХреНрд╖рд░рд╛рдиреБрд╕рд╛рд░ рд╣рдЬрд╛рд░реЛ рд╢рдмреНрджрд╛рдВрдЪреА рд╕реВрдЪреА рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рдд рдЖрд╣рд╛рдд рдЖрдгрд┐ рддреБрдореНрд╣рд╛рд▓рд╛ рд╢рдмреНрджрд╛рдВрдЪреНрдпрд╛ рдЬреЛрдбреАрдЪреА рд╡рд╛рд░рдВрд╡рд╛рд░ рддреБрд▓рдирд╛ рдХрд░рд╛рд╡реА рд▓рд╛рдЧреЗрд▓. рдЖрдгрд┐ рд╢рдмреНрдж рд▓рд╛рдВрдм рдЖрд╣реЗрдд, рддреНрдпрд╛рдд рдмрд░реАрдЪ рдЕрдХреНрд╖рд░реЗ рдЖрд╣реЗрдд. рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдЕрд╢реА рддреБрд▓рдирд╛ рдЦреВрдк рд╡реЗрд│ рдШреЗрдИрд▓.

рдкрдг рд╡реЗрдЧ рд╡рд╛рдврд╡рддрд╛ рдпреЗрддреЛ. рд╕рдордЬрд╛ рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдЕрдХреНрд╖рд░рд╛рдВрдиреА рд╕реБрд░реВ рд╣реЛрдгрд╛рд░реЗ рд╢рдмреНрдж рдЖрд╣реЗрдд - рддреЗ рд╡реЗрдЧрд│реЗ рдЖрд╣реЗрдд рд╣реЗ рд▓рдЧреЗрдЪ рд╕реНрдкрд╖реНрдЯ рд╣реЛрддреЗ. рдкрд░рдВрддреБ рдЬрд░ рддреЗ рд╕рдорд╛рди рдЕрдХреНрд╖рд░рд╛рдВрдиреА рд╕реБрд░реВ рдЭрд╛рд▓реЗ, рддрд░ рдкрд░рд┐рдгрд╛рдо рдХрд╛рдп рд╣реЛрдИрд▓ рд╣реЗ рдЖрдореНрд╣реА рдЕрджреНрдпрд╛рдк рд╕рд╛рдВрдЧреВ рд╢рдХрдд рдирд╛рд╣реА: рд╢рдмреНрдж рд╕рдорд╛рди рдХрд┐рдВрд╡рд╛ рднрд┐рдиреНрди рдЕрд╕реВ рд╢рдХрддрд╛рдд.

рдкрджреНрдзрдд hashCode()рд╕рдорд╛рди рддрддреНрддреНрд╡ рд╡рд╛рдкрд░реВрди рдХрд╛рд░реНрдп рдХрд░рддреЗ. рдЖрдкрдг рдПрдЦрд╛рджреНрдпрд╛ рд╡рд╕реНрддреВрд╡рд░ рдХреЙрд▓ рдХреЗрд▓реНрдпрд╛рд╕, рддреЗ рдХрд╛рд╣реА рд╕рдВрдЦреНрдпрд╛ рдкрд░рдд рдХрд░рддреЗ - рд╢рдмреНрджрд╛рддреАрд▓ рдкрд╣рд┐рд▓реНрдпрд╛ рдЕрдХреНрд╖рд░рд╛рдкреНрд░рдорд╛рдгреЗ. рдпрд╛ рдирдВрдмрд░рдордзреНрдпреЗ рдЦрд╛рд▓реАрд▓ рдЧреБрдгрдзрд░реНрдо рдЖрд╣реЗрдд:

  • рд╕рдорд╛рди рд╡рд╕реНрддреВрдВрдордзреНрдпреЗ рдиреЗрд╣рдореА рд╕рдорд╛рди рд╣реЕрд╢рдХреЛрдб рдЕрд╕рддреЛ
  • рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдордзреНрдпреЗ рд╕рдорд╛рди рд╣реЕрд╢рдХреЛрдб рдЕрд╕реВ рд╢рдХрддрд╛рдд рдХрд┐рдВрд╡рд╛ рддреНрдпрд╛рдВрдЪреЗ рд╣реЕрд╢рдХреЛрдб рд╡реЗрдЧрд│реЗ рдЕрд╕реВ рд╢рдХрддрд╛рдд
  • рдЬрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдордзреНрдпреЗ рднрд┐рдиреНрди рд╣реЕрд╢рдХреЛрдб рдЕрд╕рддреАрд▓, рддрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдирдХреНрдХреАрдЪ рднрд┐рдиреНрди рдЖрд╣реЗрдд

рд╣реЗ рдЖрдгрдЦреА рд╕реНрдкрд╖реНрдЯ рдХрд░рдгреНтАНрдпрд╛рд╕рд╛рдареА, рдпрд╛ рдЧреБрдгрдзрд░реНрдорд╛рдВрдирд╛ рд╢рдмреНрджрд╛рдВрдордзреНтАНрдпреЗ рд░реАрдлреНрд░реЗрдо рдХрд░реВрдпрд╛:

  • рд╕рдорд╛рди рд╢рдмреНрджрд╛рдВрдордзреНрдпреЗ рдиреЗрд╣рдореА рд╕рдорд╛рди рдкреНрд░рдердо рдЕрдХреНрд╖рд░реЗ рдЕрд╕рддрд╛рдд.
  • рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╢рдмреНрджрд╛рдВрдЪреА рдкрд╣рд┐рд▓реА рдЕрдХреНрд╖рд░реЗ рд╕рдорд╛рди рдЕрд╕реВ рд╢рдХрддрд╛рдд рдХрд┐рдВрд╡рд╛ рддреНрдпрд╛рдВрдЪреА рдкрд╣рд┐рд▓реА рдЕрдХреНрд╖рд░реЗ рд╡реЗрдЧрд│реА рдЕрд╕реВ рд╢рдХрддрд╛рдд
  • рдЬрд░ рд╢рдмреНрджрд╛рдВрдЪреА рдкрд╣рд┐рд▓реА рдЕрдХреНрд╖рд░реЗ рд╡реЗрдЧрд│реА рдЕрд╕рддреАрд▓ рддрд░ рд╢рдмреНрдж рдирдХреНрдХреАрдЪ рд╡реЗрдЧрд│реЗ рдЕрд╕рддреАрд▓

рд╡рд╕реНрддреВрдВрдЪреА рддреБрд▓рдирд╛ рд╡реЗрдЧрд╡рд╛рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╢реЗрд╡рдЯрдЪреА рдорд╛рд▓рдорддреНрддрд╛ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддреЗ:

рдкреНрд░рдердо, рджреЛрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдЪреЗ рд╣реЕрд╢рдХреЛрдб рдореЛрдЬрд▓реЗ рдЬрд╛рддрд╛рдд. рдЬрд░ рд╣реЗ рд╣реЕрд╢рдХреЛрдб рд╡реЗрдЧрд│реЗ рдЕрд╕рддреАрд▓, рддрд░ рд╡рд╕реНрддреВ рдирдХреНрдХреАрдЪ рд╡реЗрдЧрд│реНрдпрд╛ рдЖрд╣реЗрдд рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреА рдЖрдгрдЦреА рддреБрд▓рдирд╛ рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА.

рдкрд░рдВрддреБ рдЬрд░ рд╣реЕрд╢рдХреЛрдб рд╕рдорд╛рди рдЕрд╕рддреАрд▓, рддрд░ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╕рдорд╛рди рдкрджреНрдзрддреА рд╡рд╛рдкрд░реВрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдЪреА рддреБрд▓рдирд╛ рдХрд░рд╛рд╡реА рд▓рд╛рдЧреЗрд▓.



6. рдХреЛрдбрдордзреАрд▓ рдХрд░рд╛рд░

рд╡рд░ рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реЗ рд╡рд░реНрддрди Java рдордзреАрд▓ рд╕рд░реНрд╡ рд╡рд░реНрдЧрд╛рдВрдиреА рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ. рд╕рдВрдХрд▓рдирд╛рджрд░рдореНрдпрд╛рди, рд╡рд╕реНрддреВрдВрдЪреА рддреБрд▓рдирд╛ рдпреЛрдЧреНрдп рдкреНрд░рдХрд╛рд░реЗ рдХреЗрд▓реА рдЬрд╛рддреЗ рдХреА рдирд╛рд╣реА рд╣реЗ рддрдкрд╛рд╕рдгреНрдпрд╛рдЪрд╛ рдХреЛрдгрддрд╛рд╣реА рдорд╛рд░реНрдЧ рдирд╛рд╣реА.

Java рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рдЪрд╛ рдПрдХ рд╕рд╛рд░реНрд╡рддреНрд░рд┐рдХ рдХрд░рд╛рд░ рдЖрд╣реЗ рдХреА рдЬрд░ рддреНрдпрд╛рдВрдиреА рд╕рдорд╛рди() рдкрджреНрдзрддреАрдЪреА рд╕реНрд╡рддрдГрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд▓рд┐рд╣рд┐рд▓реА рдЖрдгрд┐ рддреНрдпрд╛рджреНрд╡рд╛рд░реЗ рдорд╛рдирдХ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА (рд╡рд░реНрдЧрд╛рдд Object) рдУрд╡реНрд╣рд░рд░рд╛рдЗрдб рдХреЗрд▓реА, рддрд░ рддреНрдпрд╛рдВрдиреА рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдкрджреНрдзрддреАрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА hashCode()рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рд▓рд┐рд╣рд┐рд▓реА рдкрд╛рд╣рд┐рдЬреЗ рдХреА рд╡рд░реАрд▓ рдирд┐рдпрдо рд╕рдорд╛рдзрд╛рдиреА

рдпрд╛ рд╡реНрдпрд╡рд╕реНрдереЗрд▓рд╛ рдХрд░рд╛рд░ рдореНрд╣рдгрддрд╛рдд .

рддреБрдореНрд╣реА рддреБрдордЪреНрдпрд╛ рд╡рд░реНрдЧрд╛рдд рдлрдХреНрдд equals()рдХрд┐рдВрд╡рд╛ рдлрдХреНрдд hashCode()рдкрджреНрдзрдд рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реНрдпрд╛рд╕, рддреБрдореНрд╣реА рдХрд░рд╛рд░рд╛рдЪреЗ рдШреЛрд░ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рдд рдЖрд╣рд╛рдд (рддреБрдореНрд╣реА рдХрд░рд╛рд░ рдореЛрдбрд▓рд╛ рдЖрд╣реЗ). рд╣реЗ рдХрд░реВ рдирдХрд╛.

рдЗрддрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рддреБрдордЪрд╛ рдХреЛрдб рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реНрдпрд╛рд╕, рддреЗ рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдХрд╛рд░реНрдп рдХрд░рдгрд╛рд░ рдирд╛рд╣реА. рдЗрддрдХреЗрдЪ рдХрд╛рдп, рддреБрдореНрд╣реА рд╡рд░реАрд▓ рдХрд░рд╛рд░рд╛рдВрдЪреНрдпрд╛ рдкрд╛рд▓рдирд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рд▓реЗрд▓рд╛ рдХреЛрдб рд╡рд╛рдкрд░рд╛рд▓.

рдорд╣рддреНрд╡рд╛рдЪреЗ!

рдШрдЯрдХ рд╢реЛрдзрддрд╛рдирд╛, рд╕рд░реНрд╡ Java рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рдердо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдЪреНрдпрд╛ рд╣реЕрд╢рдХреЛрдбрдЪреА рддреБрд▓рдирд╛ рдХрд░рддрд╛рдд рдЖрдгрд┐ рддреНрдпрд╛рдирдВрддрд░рдЪ equalsрдкрджреНрдзрдд рд╡рд╛рдкрд░реВрди рддреБрд▓рдирд╛ рдХрд░рддрд╛рдд.

рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдХреА рдЬрд░ рддреБрдореНрд╣реА рддреБрдордЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рд╡рд░реНрдЧрд╛рд▓рд╛ рдПрдХ рдкрджреНрдзрдд рджрд┐рд▓реА рдкрд░рдВрддреБ рддреБрдореНрд╣реА рддреБрдордЪреА рд╕реНрд╡рддрдГрдЪреА рдкрджреНрдзрдд equalsрд▓рд┐рд╣рд┐рд▓реА рдирд╛рд╣реА рдХрд┐рдВрд╡рд╛ рддреБрдореНрд╣реА рддреА рдЪреБрдХреАрдЪреНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реА, рддрд░ рд╕рдВрдЧреНрд░рд╣ рддреБрдордЪреНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рд╕рд╣ рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдХрд╛рд░реНрдп рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реАрдд.hashCode()

рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддреБрдореНрд╣реА рд╕реВрдЪреАрдордзреНрдпреЗ рдПрдЦрд╛рджреА рд╡рд╕реНрддреВ рдЬреЛрдбреВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдирдВрддрд░ рддреА contains()рдкрджреНрдзрдд рд╡рд╛рдкрд░реВрди рд╢реЛрдзреВ рд╢рдХрддрд╛, рдкрд░рдВрддреБ рд╕рдВрдЧреНрд░рд╣рд╛рд▓рд╛ рддреБрдордЪрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд╛рдкрдбрдгрд╛рд░ рдирд╛рд╣реА.