Type Casting در جاوا چیست؟
نوع داده مجموعه ای از مقادیر از پیش تعریف شده است که نوع مقادیری را که می توان در آن ذخیره کرد به همراه عملیاتی که می توان روی آنها انجام داد را مشخص می کند.چرا نوع ریخته گری مورد نیاز است؟
جاوا انواع داده های اولیه متفاوتی دارد که به فضاهای متفاوتی در حافظه نیاز دارند. این می تواند باعث ایجاد مشکلات سازگاری در هنگام اختصاص دادن مقدار یک نوع داده به نوع دیگر شود. اگر تایپ های داده از قبل سازگار باشند، تایپ کست به طور خودکار توسط کامپایلر انجام می شود. بنابراین، typecasting یک مشکل سازگاری عمده را هنگام برخورد با انواع داده های مختلف در برنامه ما حل می کند.انواع جاوا Type Casting
دو نوع نوع ریخته گری در جاوا وجود دارد.- ریخته گری نوع گسترده - همچنین به عنوان ریخته گری نوع ضمنی یا خودکار نیز شناخته می شود
- ریخته گری نوع باریک - همچنین به عنوان ریخته گری نوع صریح یا دستی شناخته می شود
نوع گسترده ریخته گری
Widening typecasting، همانطور که از نام آن پیداست، به گسترش یک نوع داده کوچکتر به یک نوع داده بزرگتر اشاره دارد. این نوع کاست را زمانی انجام می دهیم که بخواهیم یک نوع کوچک را به یک نوع بزرگ تبدیل کنیم. انواع داده ها باید با یکدیگر سازگار باشند. هیچ تبدیل ضمنی از عددی به نوع char یا boolean وجود ندارد. در جاوا، انواع 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 به مقدار طولانی: 100 int به مقدار شناور: 100.0 بایت مقدار: 1 بایت به مقدار int: 1 مقدار کاراکتر: یک char به مقدار int: 97
توضیح
در کد بالا، تایپ کست گسترده را نشان داده ایم که توسط کامپایلر به صورت خودکار انجام می شود. اول از همه، ما مقادیری را به int ، بایت و char اختصاص دادیم . سپس مقادیر int را به long و float اختصاص دادیم که هر دو بزرگتر از int هستند . ما همچنین مقادیر بایت و char را به int اختصاص دادیم . هر دو بایت و char انواع داده های کوچک تری نسبت به int هستند ، بنابراین، این تبدیل ها ضمنی بودند.نوع باریک ریخته گری
همانطور که از نام آن پیداست، نوع داده باریک به محدود کردن یک نوع داده بزرگتر به یک نوع داده کوچکتر اشاره دارد. این نوع کاست را زمانی انجام می دهیم که بخواهیم یک نوع بزرگ را به یک نوع کوچک تبدیل کنیم.
double -> float -> long -> int -> char -> short -> byte
برای این نوع ریختهگری، با تعیین تبدیل خودمان، تبدیل پیشفرض جاوا را لغو میکنیم. برای دستیابی به این هدف، متغیر یا مقداری را که باید تایپ شود و قبل از آن نوع داده هدف در پرانتز '()' نوشته می شود. با این حال، این نوع ریختهگری ممکن است منجر به از دست دادن دقت احتمالی شود.
مثال
//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 ارزش کاراکتر: a
GO TO FULL VERSION