מערך הוא מבנה נתונים שמורכב מקבוצה של תאי זיכרון שגודלה נקבע
ברגע
שהמערך נוצר. לתאי הזיכרון השונים של המערך מתייחסים בעזרת שלמים אי
שליליים שבין 0 לגודל המערך פחות אחד. הטיפוס של כל תאי הזיכרון במערך
זהה. כלומר כל תאי הזיכרון הם מטיפוס int
,
או שכולם מטיפוס char
, או שכולם
מטיפוס double
, וכדומה.
השם של הטיפוס של מערך שהאיברים שלו הם מטיפוס T
הוא T[]
.
משתנה שהטיפוס שלו הוא טיפוס של מערך לא מכיל את איברי המערך. איברי המערך
שמורים במקום אחר בזיכרון, שנקרא heap, והוא נפרד מהמקום שבו נשמרים
משתנים. משתנה שהטיפוס שלו הוא טיפוס של מערך מכיל רק
התייחסות (referenct)
למיקום של התאים ב-heap, שמאפשר לשפת התכנות למצוא את האיברים. ההבדל בין
משתנה מטיפוס פרימיטיבי שממש מכיל ערך ובין משתנה מטיפוס מערך שמכיל
התייחסות למערך לא נראה אולי גדול, אבל הוא גדול.
הגדרה של משתנה שהטיפוס שלו הוא מערך לא יוצרת את המערך. למשל, הקוד
int[] a;
לא יוצר שום מערך. הוא רק יוצר משתנה שיכול להכיל התייחסות
למערך. לאחר הגדרה כזו, הוא אינו מכיל שום התייחסות. לערך שהוא כן מכיל
קוראים null
. זהו פשוט סימון שמשתנה שעשוי
להכיל התייחסות למבנה נתונים ב-heap לא מכיל התייחסות כזו.
כדי ליצור מערך, צריך להשתמש באופרטור בשם new
.
האופרטור הזה מקבל ארגומנט שהוא שם הטיפוס שרוצים ליצור, ובמקרה של
מערכים, את גודל המערך. כאמור, למערכים יש גודל (מספר תאים) קבוע שנקבע
כאשר יוצרים אותם.
a = new int[19];
האופרטור new
יוצר מערך שכל איבריו
מכילים אפס (אם הם מטיפוס פרימיטיבי מספרי, או false
אם הם בוליאניים) ומחזיר התייחסות אליו. ההתייחסות הזו נשמרת במשתנה
שביצענו השמה לתוכו.
כדי להשתמש באיברי המערך, מציינים את שמו (ליתר דיוק שם של משתנה
שמתייחס אליו) ואת מספר האיבר בתוך סוגריים מרובעים. הביטוי a[17]
מתייחס לאיבר השמונה-עשרה במערך (כי המספור מתחיל כאמור מאפס). הסימון הזה
מאפשר גם להשתמש בערך ששמור באיבר של מערך וגם לבצע השמה לאיבר.
תוכנית ג'אווה יודעת מה גודלו של כל מערך. אם המשתנה a
מתייחס למערך, אזי הביטוי a.length
מחזיר את
גודל המערך (מספר האיברים במערך). זה שימושי מאוד כאשר צריכים לסרוק את כל
האיברים במערך.
אם משתנה מטיפוס מערך אינו מכיל התייחסות (ערכו null
),
שימוש בו כדי להתייחס לאיבר של מערך או לגודל המערך הוא שגיאה.
שפת ג'אווה מכילה שתי צורות לציין מערך קבוע (literal) בגוף התוכנית. מערך קבוע הוא הכללה של מספר (משתנה מספרי קבוע) או מחרוזת שמופיעים בגוף התוכנית. הצורה המלאה, שתמיד ניתן להשתמש בה, היא
new T[] { element1, element2, ..., elementn }
הצורה השניה, שניתן להשתמש בה רק לאתחול של משתנה מטיפוס מערך מייד בהגדרה שלו, כוללת רק את הסוגריים המסולסלים ואת רשימת הערכים
int[] b = { 1, 2, 3, 4 };
בשתי הצורות הללו האיברים יכולים להיות ביטויים כלשהם. ערכם יחושב בזמן ריצה, ולא לא צריך להיות ידוע בזמן קומפילציה.