3.8.5. השוואת אובייקטים
האופרטור == המוגדר ב-Java
מחזיר אמת אם שני האופרנדים המושווים הם בעלי אותו ערך.
אופרטור זה עובד כראוי עבור סוגי
המשתנים הבסיסיים, אולם במקרה של מחלקות הוא משווה בין משתני ההתייחסות בלבד, ולא
בין האובייקטים שהם מצביעים אליהם. הדוגמא הבאה תמחיש את הנושא.
נניח כי כתבנו את שורות הקוד הבאות:
Integer i1 = new
Integer("3");
Integer i2 = new
Integer("3");
Integer i3 = i2;
אזי הביטוי הבא יתפרש לערך אמת:
i1 == i1
&& i1 != i2 && i2 == i3
נשים לב שזו לא תמיד ההתנהגות הרצויה.
כדי להשוות בין אובייקטים נשתמש
בפונקציה boolean equals(Object o), בצורה הבאה למשל:
i1.equals(i1)
&& i1.equals(i2)
ביטוי זה יתפרש לערך אמת כמצופה.
כל מחלקה שמגדירים ב-Java
יורשת באופן אוטומטי את המשתנים והמתודות שהוגדרו במחלקה Object. אחת השיטות שמוגדרות במחלקה Object
ומועברת בהורשה אל כל מחלקה שנגדיר היא השיט equals. באמצעות השיטה equals
ניתן להשוות בין אובייקט נתון לאובייקט אחר. השיטה משווה את כתובות שני האובייקטים
ומחזירה true רק אם הן זהות. פעולתה זהה למעשה לפעולתו של אופרטור ההשוואה: ==,
אשר גם כן משווה בין שתי הכתובות. אם זאת, רוב המחלקות בשפת Java, וגם המחלקות שאנחנו נכתוב
יצרכו לעשות זאת, חופפות את שיטה זו, על מנת שתחזיר ערך משמעותי, למשל, תשווה בין
הערכים המוצבעים על ידי משתני ההתייחסות.
דוגמא לחפיפת פונקציה זו:
public class Name
{
String
firstName;
String
lastName;
...
public
boolean equals(Object o)
{
if
(!(o instanceof Name)) return false;
Name n
= (Name)o;
return
firstName.equals(n.firstName) &&
lastName.equals(n.lastName);
}
}
xss hack
אני רוצה שתעזור לי ב xss אשמח לתשובה