מהו Type Casting ב-Java?
סוג נתונים הוא קבוצה מוגדרת מראש של ערכים המציינים את סוג הערכים שניתן לאחסן בו יחד עם הפעולה שניתן לבצע עליהם.מדוע נדרשת ליהוק סוג?
ל- Java יש סוגי נתונים פרימיטיביים שונים הדורשים רווחים שונים בזיכרון. זה יכול לגרום לבעיות תאימות בזמן הקצאת ערך של סוג נתונים אחד לאחר. אם סוגי הנתונים כבר תואמים, ה-typecasting מתבצע באופן אוטומטי על ידי המהדר. לפיכך, שידור סוג פותר בעיית תאימות גדולה כאשר עוסקים בסוגי נתונים שונים בתוכנית שלנו.סוגי ליהוק מסוג Java
ישנם שני סוגים של ליהוק סוג בג'אווה.- יציקת סוג הרחבת - ידוע גם בשם יציקת סוג מרומזת או אוטומטית
- יציקה מסוג צמצום - ידוע גם בשם יציקה מסוג מפורש או ידני
סוג הרחבת יציקה
הרחבת טיפוס, כפי שהשם מרמז, מתייחס להרחבת סוג נתונים קטן יותר לסוג נתונים גדול יותר. אנו מבצעים את ה-typecasting הזה כאשר אנו רוצים להמיר סוג קטן לסוג גדול. סוגי הנתונים חייבים להיות תואמים זה לזה. אין המרה מרומזת מספרי ל-char או סוג בוליאני. ב-Java, סוגי char ו-boolean אינם תואמים.
byte -> short -> char -> int -> long -> float -> double
סוג זה של ליהוק מתבצע באופן אוטומטי על ידי המהדר ללא כל אובדן מידע. זה לא דורש שום טריגר חיצוני על ידי המתכנת.
דוגמא
//Automatic type conversion
public class WideningExample {
public static void main(String[] args) {
int i = 100;
System.out.println("int value: " + i);
// int to long type
long l = i;
System.out.println("int to long value: " + l);
// long to float type
float f = l;
System.out.println("int to float value: " + f);
byte b = 1;
System.out.println("byte value: " + b);
// byte to int type
i = b;
System.out.println("byte to int value: " + i);
char c = 'a';
System.out.println("char value: " + c);
// char to int type
i = c;
// prints the ASCII value of the given character
// ASCII value of 'a' = 97
System.out.println("char to int value: " + i);
}
}
תְפוּקָה
int ערך: 100 int ל-long ערך: 100 int to float ערך: 100.0 byte ערך: 1 byte to int ערך: 1 char ערך: char to int ערך: 97
הֶסבֵּר
בקוד שלמעלה, הראינו את הרחבת ה-typecasting אשר מתבצעת על ידי המהדר באופן אוטומטי. קודם כל, הקצינו ערכים ל- int , byte ו- char . לאחר מכן הקצינו את ערכי int ל- long ו- float , ששניהם גדולים יותר מ- int . הקצינו גם את ערכי ה- byte וה- char ל- int . גם בייט וגם char הם סוגי נתונים קטנים יותר מאשר int , ולכן ההמרות הללו היו מרומזות.צמצום סוג יציקה
צמצום ה-typecasting, כפי שהשם מרמז, מתייחס לצמצום של סוג נתונים גדול יותר לסוג נתונים קטן יותר. אנו מבצעים את ה-typecasting הזה כאשר אנו רוצים להמיר סוג גדול לסוג קטן.
double -> float -> long -> int -> char -> short -> byte
עבור סוג זה של ליהוק, אנו עוקפים את המרת ברירת המחדל של Java על ידי ציון ההמרה שלנו. כדי להשיג זאת, אנו כותבים את המשתנה או הערך שיש לטייפ לפניו סוג נתוני היעד בסוגריים '()'. עם זאת, סוג זה של יציקה עלול לגרום לאובדן אפשרי של דיוק.
דוגמא
//Manual Type Conversion
public class NarrowingExample {
public static void main(String[] arg) {
// double data type
double d = 97.04;
// Print statements
System.out.println("double value: " + d);
// Narrowing type casting from double to long
// implicitly writing the target data type in () followed by initial data type
long l = (long) d;
// fractional part lost - loss of precision
System.out.println("long value: " + l);
// Narrowing type casting from double to int
// implicitly writing the target data type in () followed by initial data type
int i = (int) l;
// fractional part lost - loss of precision
System.out.println("int value: " + i);
// Narrowing type casting from double to int
// implicitly writing the target data type in () followed by initial data type
char c = (char) i;
// displaying character corresponding to the ASCII value of 100
System.out.println("char value: " + c);
}
}
תְפוּקָה
ערך כפול: 97.04 ערך ארוך: 97 ערך int: 97 ערך char: א
GO TO FULL VERSION