משתנים פרימיטיביים

נתונים מיוצגים בג'אווה בעזרת שמונה טיפוסים של משתנים. גם מבני הנתונים המורכבים ביותר בנויים מאוסף של שמונת הטיפוסים הללו. טיפוסי הנתונים הללו נקראים טיפוסים פרימיטיביים.

התוכנית המצורפת מגדירה משתנים מכל שמונת הסוגים. כל משתנה כזה הוא מקום בזיכרון שהשגרה יכולה לשמור בו נתונים בזמן שהיא פועלת. משתנים כאלה, שמשך חייהם הוא הפעלה בודדת של שגרה, נקראים משתנים אוטומטיים (מכיון שהם נוצרים באופן אוטומטי כאשר השגרה מתחילה לפעול ונעלמים באופן אוטומטי כאשר היא מסיימת לפעול). השגרה יכולה כמובן לשנות את הערך השמור במשתנה.

ארבעה מהטיפוסים יכולים לייצג מספרים שלמים. לכל אחד מארבעת הטיפוסים יש טווח ייצוג אחר, החל מ- byte שמיוצג על ידי 8 סיביות ויכול ליצג מספרים בטווח שבין -128 ל 127, דרך short, שיכול לייצג מספרים חיוביים ושליליים עד קצת למעלה משלושים אלף, דרך int, שיכול לייצג מספרים עד יותר משני מליארד, וכלה ב- long, שיכול לייצג מספרים עד גודל של כמעט 2 בחזקת 63, שזה כמעט 10 בחזקת 19. כמובן שהמשתנים שיכולים לייצג טווח מספרים גדול גם תופסים יותר מקום בזיכרון, וחישובים עליהם עלולים להיות איטיים יותר מאשר על משתנים מטיפוסים בעלי טווח יותר קטן (אם כי לא תמיד זה נכון). הייצוג של מספרים שלמים בזיכרון של המחשב הוא בינארי (בבסיס 2), בייצוג שנקרא משלים 2.

יש שפות תכנות שבהן יש גם טיפוסים פרימיטיביים שמייצגים מספרים שלמים אי שליליים בלבד, אבל בג'אווה ויתרו על טיפוסים כאלה.

טיפוס פרימיטיבי נוסף, char, משמש לאחסון תו בודד. תוים הם כינויים לסימני הכתב, והם כוללים אותיות, ספרות, וסימני פיסוק. אוסף התוים בג'אווה יכול לייצג את סימני הכתב של רוב השפות בעולם, כולל את השפות של מזרח אסיה, שנכתבות באלפי אותיות. למעשה, כל תו מיוצג בזיכרון של התוכנית על ידי מספר שלם חיובי, וניתן להשתמש במשתנים מטיפוס char גם כמספרים, אבל זהו שימוש לא סטנדרטי והוא עלול לגרום לבעיות מסויימות; בהמשך נסביר את ההבדלים הדקים למדי שבין טיפוס מספרי ובין תו. כרגע נחשוב על המשתנים הללו כעל משתנים שיכולים להכיל תו בודד ותו לא. הקודים המספריים שמייצגים תוים הם שרירותיים למדי: התו '3' למשל, אינו מיוצג על ידי המספר 3.

שני טיפוסים פרימיטיביים float ו-double, מיועדים לייצוג של מספרים שלמים. הטיפוס double דורש כמות זיכרון כפולה מזו שדרושה ל-float, אבל יש לו טווח גדול יותר ורמת דיוק גבוהה יותר. הטיפוסים הללו מסוגלים לייצג לא רק מספרים, אלא גם ערכים נוספים, כגון אינסוף ומינוס אינסוף. הייצוג של הטיפוסים הללו גם הוא בינרי, אבל שונה לגמרי מהייצוג של מספרים שלמים.

הטיפוס הפרימיטיבי האחרון הוא boolean, שמייצג רק שני ערכים: נכון ולא נכון.

שאלות

  1. קראי את התוכנית המצורפת ונסי לקבוע מה היא תדפיס.
  2. הריצי את התוכנית ובידקי האם צדקת. לפחות אחת ההדפסות מפתיעה. איזו היא, ולמה לדעתך זה קורה?