💎 مقایسه اشیا (ابجکت ها) در جاوا
🔆 توی جاوا هر کلاس بصورت پیشفرض از کلاس Object ارث بری میکند. کلاس Object شامل متد هایی مثل hashCode, equals, toString و... میشود که کاربرد گسترده ای در رابطه با کار با ابجکت ها دارند. به همین منظور برای مقایسه ابجکت ها از متد equals و hashCode از کلاس Object استفاده میشود.
🔗در مورد کلاس آبجکت از اینجا بخوانید
🔅هش کد در جاوا یک عدد صحیح 32 بیتی میباشد. هش کد یک مقدار منحصر بفرده که بصورت پیشفرض توسط JVM برای هر نمونه (شی / ابجکت) تعریف میشود.
👈 طبق این تعریف اگر دو ابجکت دارای هش کد برابر باشند، یعنی با هم برابرند با توجه به متد equals ولی لزوما دو ابجکت با هش کد برابر، با هم برابر نیستند. یعنی این شرط لازم و کافی نیست.
برای بررسی برابر بودن ابجکت ها، لازم است متد equals پیاده سازی شود.
🔰 مثال:
💠 کلاس Employee
داخل کلاس متد equals را اورراید میکنیم و فیلد هارا با هم مقایسه میکنیم (البته بستگی به این داره که برابری از نظر شما چه شرایطی داشته باشد. توی این مثال من شرط برابری را برابر بودن فیلد ها قرار دادم).
(برای بهتر دیده شدن کد ها، گوشی را در حالت افقی نگه دارید)
(❔) شرط اول: this == o به این معناست که اگر هر دو ابجکت به یک ادرس از حافظه اشاره کنند، یعنی با هم برابرند و مقدار ترو را برگرداند.
(❔) شرط دوم: اگر ابجکت o از یک کلاس نباشد و یا مقدار null را داشته باشد، یعنی با هم برابر نیستند و مقدار فالس را برگرداند.
✅ اگر شرط یک و دو با موفقیت پشت سر گذاشته شود، نوع o را که از نوع Object میباشد، به نوع Employee تغییر میدهیم (type casting) و سپس سراغ شرط آخر میرویم.
(❔) شرط آخر: با توجه به برابر بودن یا نبودن فیلد های کلاس، مقدار ترو یا فالس را برمیگرداند.
🔰 بعنوان مثال با توجه به متد equals باید این دو ابجکت شرط برابری را داشته باشند:
@pieceJava
🔆 توی جاوا هر کلاس بصورت پیشفرض از کلاس Object ارث بری میکند. کلاس Object شامل متد هایی مثل hashCode, equals, toString و... میشود که کاربرد گسترده ای در رابطه با کار با ابجکت ها دارند. به همین منظور برای مقایسه ابجکت ها از متد equals و hashCode از کلاس Object استفاده میشود.
🔗در مورد کلاس آبجکت از اینجا بخوانید
🔅هش کد در جاوا یک عدد صحیح 32 بیتی میباشد. هش کد یک مقدار منحصر بفرده که بصورت پیشفرض توسط JVM برای هر نمونه (شی / ابجکت) تعریف میشود.
👈 طبق این تعریف اگر دو ابجکت دارای هش کد برابر باشند، یعنی با هم برابرند با توجه به متد equals ولی لزوما دو ابجکت با هش کد برابر، با هم برابر نیستند. یعنی این شرط لازم و کافی نیست.
برای بررسی برابر بودن ابجکت ها، لازم است متد equals پیاده سازی شود.
🔰 مثال:
💠 کلاس Employee
داخل کلاس متد equals را اورراید میکنیم و فیلد هارا با هم مقایسه میکنیم (البته بستگی به این داره که برابری از نظر شما چه شرایطی داشته باشد. توی این مثال من شرط برابری را برابر بودن فیلد ها قرار دادم).
(برای بهتر دیده شدن کد ها، گوشی را در حالت افقی نگه دارید)
public class Employee {
private String firstName;
private String lastName;
public Employee(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Employee a = (Employee) o;
return firstName.equals(a.firstName) && lastName.equals(a.lastName);
}
}
بعد از اورراید کردن متد، شرایط زیر را بررسی میکنیم:(❔) شرط اول: this == o به این معناست که اگر هر دو ابجکت به یک ادرس از حافظه اشاره کنند، یعنی با هم برابرند و مقدار ترو را برگرداند.
(❔) شرط دوم: اگر ابجکت o از یک کلاس نباشد و یا مقدار null را داشته باشد، یعنی با هم برابر نیستند و مقدار فالس را برگرداند.
✅ اگر شرط یک و دو با موفقیت پشت سر گذاشته شود، نوع o را که از نوع Object میباشد، به نوع Employee تغییر میدهیم (type casting) و سپس سراغ شرط آخر میرویم.
(❔) شرط آخر: با توجه به برابر بودن یا نبودن فیلد های کلاس، مقدار ترو یا فالس را برمیگرداند.
🔰 بعنوان مثال با توجه به متد equals باید این دو ابجکت شرط برابری را داشته باشند:
Employee e1 = new Employee("A","B");
Employee e2 = new Employee("A","B");
System.out.println(e1.equals(e2));//returns true
#equals #object #hashCode #hash #inheritence@pieceJava
Telegram
تیکه پاره های جاوا
💎 کلاس Object در جاوا
هر کلاس جاوا بصورت مستقیم یا غیر مستقیم از کلاس Object ارث بری میکند. این به این معناست که هر کلاسی میتواند متد های کلاس Object را که به نحوی private یا final نیستند، اورراید کند.
⭕️متد HashCode مقدار هش کد را برای شی بازگشت میدهد.…
هر کلاس جاوا بصورت مستقیم یا غیر مستقیم از کلاس Object ارث بری میکند. این به این معناست که هر کلاسی میتواند متد های کلاس Object را که به نحوی private یا final نیستند، اورراید کند.
⭕️متد HashCode مقدار هش کد را برای شی بازگشت میدهد.…
👍5