CodeGym /وبلاگ جاوا /Random-FA /جاوا نوع ریخته گری
John Squirrels
مرحله
San Francisco

جاوا نوع ریخته گری

در گروه منتشر شد

Type Casting در جاوا چیست؟

نوع داده مجموعه ای از مقادیر از پیش تعریف شده است که نوع مقادیری را که می توان در آن ذخیره کرد به همراه عملیاتی که می توان روی آنها انجام داد را مشخص می کند.
جاوا Type Casting فرآیندی است که در آن یک نوع داده به نوع دیگر تبدیل می شود.
می تواند هم ضمنی و هم صریح باشد . نوع نویسی ضمنی که به نام تایپ کست خودکار نیز شناخته می شود توسط کامپایلر انجام می شود. تایپ کاست صریح به صورت دستی توسط برنامه نویس در کد انجام می شود.

چرا نوع ریخته گری مورد نیاز است؟

جاوا انواع داده های اولیه متفاوتی دارد که به فضاهای متفاوتی در حافظه نیاز دارند. این می تواند باعث ایجاد مشکلات سازگاری در هنگام اختصاص دادن مقدار یک نوع داده به نوع دیگر شود. اگر تایپ های داده از قبل سازگار باشند، تایپ کست به طور خودکار توسط کامپایلر انجام می شود. بنابراین، typecasting یک مشکل سازگاری عمده را هنگام برخورد با انواع داده های مختلف در برنامه ما حل می کند.

انواع جاوا Type Casting

دو نوع نوع ریخته گری در جاوا وجود دارد.
  1. ریخته گری نوع گسترده - همچنین به عنوان ریخته گری نوع ضمنی یا خودکار نیز شناخته می شود
  2. ریخته گری نوع باریک - همچنین به عنوان ریخته گری نوع صریح یا دستی شناخته می شود

نوع گسترده ریخته گری

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

توضیح

باریک کردن تایپ کاست باید به صراحت توسط برنامه نویس با استفاده از یک نحو استاندارد انجام شود. در برنامه بالا، ما با یک مقدار دوگانه شروع کرده ایم که بزرگتر از انواع داده های long و int است . ما با استفاده از پرانتز با انواع داده‌های هدف مورد نظر، این double را به long و int تایپ کردیم. ما همچنین به صورت دستی 'int' را به 'char' تایپ کرده ایم.

نتیجه

تا پایان این پست، امیدواریم که با جاوا Type Casting به طور کامل آشنا شده باشید. شما دو نوع تایپ کست در جاوا را یاد گرفته اید. شما همچنین یاد گرفته‌اید که چگونه به‌صورت دستی انواع داده‌های ناسازگار را با استفاده از Typecasting Narrowing ارسال کنید. می‌توانید ترکیب‌های دیگری از انواع داده‌ها را با مقادیر مختلف به تنهایی امتحان کنید تا آن را عمیق‌تر درک کنید. برای تسلط عمیق تر به مفهوم به تمرین ادامه دهید. تا آن زمان، به رشد خود ادامه دهید و همچنان بدرخشید!
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION