PDA

View Full Version : سوال: متد ( ) equals ?



esmaeilbf
جمعه 27 اردیبهشت 1392, 14:35 عصر
برای مقایسه ی مقدار دوتا primitive type از عملگر == استفاده میشه مثلا:
int x=2
int y=2
x==y خروجیش میشه: true
--------------------------------------------
وقتی می نویسیم:
Integer z = new Integer(2);
Integer y = new Integer(2);
boolean result = z == y;
خروجیش :false هست چون برای مقایسه محتوای object ها باید از متد equals استفاده بشه
و اگر بنویسیم :
boolean result = z.equals(y);
خروجی : true هست
--------------------------------------------
تا اینجا مشکلی نیست اما وقتی حودمون یک کلاس که داخلش یک فیلد داره می سازیم
دیگه متد equals روی شی ای که از اون کلاس میسازیم جواب نمیده!!
علتش چی هست؟
و راه حلش چیه؟

cups_of_java
جمعه 27 اردیبهشت 1392, 21:05 عصر
هر کلاسی متد equals رو باید با توجه به ساختار درونی خودش معنی (و پیاده سازی) کنه. کلاس Integer رو اگه بری سورسش رو نگاه کنی این متد رو پیاده سازی کرده.
بنابراین شما باید برای هر کلاس خودت که می خوای equals اش کار کنه، این تابع رو توی کلاس پیاده سازی کنی (مثلن مساوی بودن اون فیلد رو بین دو تای شی از اون کلاس بررسی کنی)

@Override
public boolean equals(Object other){
if (other == null) return false;
if (other == this) return true;
if (!(other instanceof MyClass))return false;
MyClass otherMyClass = (MyClass)other;
...test other properties here...
}