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);

      }

}

תגיות המסמך:

מאת: anonymos

xss hack

אני רוצה שתעזור לי ב xss אשמח לתשובה
מאת: BLT

תודה רבה!

וואי הצלת אותי! קיבלתי שאלה שלא הצלחתי להבין מה רוצים ממני בכלל ועזרת מאוד, תודה :)
מאת: דולב

מה זה פונקציה?
מאת: משה

עזרה

חיה רצית עזרה ואשמח לעזור
mmh15@windowslive.com
מאת: חיה

תיכנות

יש לי שאלה : כשאני עושה תרגיל מסויים אני וידעת את האלגוריתם אבל לא מצליחה לממש אותה
אתה במקרה מעביר שיעורים פרטיים??אני ממש אשמח
תודה מראש.
מאת: יחזקאל

תחביר

למרות שג'אווה מאפשרת סגנון הכרזה על מערך דומה לזה שבC++, הסגנון המומלץ באופן רשמי שונה - הסוגריים המרובעים באים מיד לאחר הטיפוס ובסמוך אליו, לא בסמוך לשם המערך.
שיתוף:
| עוד