כיתות אריזה (Wrapper Classes)
הוצג| English | משמעות |
|---|---|
| wrapper class/ˈræpə klæs/ | מחברת עטיפה |
| autoboxing/ˌɔːtəʊˈbɒksɪŋ/ | אריזת אוטומטית |
| unboxing/ʌnˈbɒksɪŋ/ | פרוק אריזה |
עטיפה של סוג בסיסי
- מבני נתונים מסוימים ב-Java (כמו
ArrayList) מאחסנים אובייקטים, לא סוגים בסיסיים. - מחלקת עטיפה עוטפת סוג בסיסי באובייקט:
Integerעוטפתint,Doubleעוטפתdouble. Integer boxed = Integer.valueOf(5);מכניסה את ה-int5לתוך אובייקט.- אריזות מאפשרות לערכים בסיסיים להתקיים במקום שבו מותרים רק אובייקטים.
אוטובוקסינג ואונבוקסינג
- Java ממירה באופן אוטומטי — אריזה אוטומטית והפרדה.
Integer x = 5;מבצעת אוטובוקסינג של5;int y = x;ביצעה אונבוקסינג חזרה.- לכן
list.add(5)עובד גם אם הרשימה מחזיקה אובייקטיInteger. - לעיתים קרובות אינו כותבים
Integer.valueOfידנית — האוטובוקסינג עושה זאת.
מדוע ArrayList זקוק להם
ArrayList<Integer>מחזיק אובייקטיInteger, כי ג'נריקס דורשים סוג ייחוס.- אין אפשרות לכתוב
ArrayList<int>— סוגים בסיסיים אינם אובייקטים. - אוטובוקסינג מאפשר להוסיף ולקרוא סוגים רגילים
intבנוחות. Double,Booleanוכו' ממלאים תפקיד זהה עבור הסוגים הבסיסיים שלהם.
השוואת עטיפות עם equals
- שני אובייקטי
Integerצריכים להיות מושווים עם.equals(), ולא==. ==משווה רעיונות (מספרי הפניה);.equals()משווה את הערכים המאוחסנים בתוכם.- (Java ממשרזת Integers קטנים, לכן
==לעיתים נראה כשהוא עובד — אל תסתמך על כך.) - אותו כלל "השתמש ב
.equals()עבור אובייקטים" מStringחל גם כאן.
עטיפות הן אובייקטים, ולכן השוו את הערכים שלהן עם .equals(), לא עם ==. == בודק זהות ייחוס; עבור שני אובייקטי Integer בעלי אותו ערך הוא יכול להיות false. ואתה לא יכול להעביר סדרה עם טיפוס פרימיטיבי — היא ArrayList<Integer>, לעולם לא ArrayList<int>. אוטובוקסינג גשר את הפער כך שתוכל עדיין להוסיף פשוט ints.
כוסות עם ArrayList:
ArrayList<Integer> nums = new ArrayList<Integer>();nums.add(5);— ה-int5אוטובוקס לאובייקטInteger.int first = nums.get(0);— ה-Integerמועבר חזרה לint.
קלאס כוס (Integer, Double, Boolean) עוטף פרימיטיבי באובייקט כדי שיוכל לשמש היכן שאובייקטים נדרשים — כמו ArrayList<Integer> (אי אפשר לכתוב ArrayList<int>). אוטובוקסינג ו-אוןבוקסינג מבצעים המרה אוטומטית. השווה אובייקטי כוס עם .equals(), לא ==.
Autoboxing ו-unboxing
המרות בין int ↔ Integer מתבצעות באופן אוטומטי.
איזו כתבת אריזה עוטפת int?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Integer עוטפת int; Double עוטפת double.
מדוע חייבים להצהיר ArrayList של ints כ-ArrayList
Difficulty 1/5 · 100 coins + a small bonus on first completion today
אי אפשר לכתוב ArrayList
שני אובייקטי Integer צריכים להיות מושווים עם...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
קופסאות הן אובייקטים — השתמש ב-.equals() עבור הערכים שלהן.
ב(nums.add(5), המספר int 5 נעטף אוטומטית לתוך Integer (autoboxing).
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Autoboxing ממיר את הגודל הקדום לאובייקט קופסה.
מחלקה שעוטפת גודל קדום באובייקט היא מחלקת ___ (מילה אחת).
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Integer, Double, Boolean הן מחלקות עטיפה.