קאסטינג מערך ב-Java

Nevoiz

New member
קאסטינג מערך ב-Java

היי,
אם אני מגדיר
int arr[]=new int [5];
double [] arr2=arr1;

קימפלתי את זה וקיבלתי שגיאה, מדוע?
למה לא מתבצע casting כמו שקורה אם הייתי עושה:
int a=5
double b=a;

תודה רבה לעוזרים.
 

BravoMan

Active member
למה שיתבצע?

אתה עושה casting בין שני אובייקטים מטיפוסים שונים שאין בניהם קשר מתאים (כגון ירושה):
אובייקט ראשון הוא מטיפוס "מערך שלמים", ואובייקט אחר הוא מטיפוס "מערך של ממשיים".
&nbsp
arr2 ו-arr1 אינם משתנים שמכילים מספר, ולכן אי אפשר להמיר בניהם כמו שאפשר להמיר בין a ל-b.
&nbsp
אם אתה רוצה לעשות המרה, עליך להקצות קודם את כמות האיברים הנחוצה למערך החדש, ואז לרוץ בלולאה ולהמיר איבר איבר.
 

Nevoiz

New member
תודה, אבל יש קשר מתאים בין int לdouble

כמו שאפשר להמיר בין a ל-b
אם arr1 ריק אי אפשר להמיר ל-b?
b יקח את כל הערכים שיש ב-a ויוסיף .00, אין איבוד מידע.
 

BravoMan

Active member
בין double ל-int כן, אבל לא בין

מערכים!

מערך ב-Java הוא אובייקט. הוא לא קשור לטיפוס שהוא מכיל.
הוא יודע לעשות פעולות די בסיסיות: לתת לך גישה לאיברים שבו, ולתת לך את האורך שלו (כמות איברים).

זהו. הוא לא יודע לבצע פעולות אחרות, כמו לרוץ בעצמו בלולאה על כל האיברים שלו, ולעשות להם המרות שונות.

שים לב גם, שאיברים במערך לא חייבים להיות כולם מאותו טיפוס או אפילו מטיפוסים שיש בניהם קשר.

קח למשל את הקוד הבא:
Object [] arr = new Object[3];
arr[0] = "Hello world";
arr[1] = 10;arr[2] = 3.14;
זה קוד חוקי, ומבחינת השפה אין הבדל בין המערך הזה למערכים בדוגמה שלך.

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

Nevoiz

New member
תודה!

הסבר מצויין, תודה רבה.
 
למעלה