تبديل خودكار و تبديل غير خودكار انواع در جاوا

تبديل خودكار و تبديل غير خودكار انواع در جاوا

اگر تجربه قبلي برنامه نويسي داشته ايد، پس مي دانيد كه كاملاً طبيعي است كه مقداري از يك نوع را به متغيري از نوع ديگر نسبت دهيم. اگر اين دو نوع سازگار باشند ، آنگاه جاوا بطور خودكار اين تبديل (conversion) را انجام مي دهد. به عنوان مثال ، همواره امكان دارد كه مقدار int را به يك متغير long نسبت داد. اما همه انواع با يكديگر سازگاري ندارند، بنابراين هر گونه تبديل انواع مجاز نخواهد بود. به عنوان مثال ، هيچ تبديلي از double به byte تعريف نشده است. خوشبختانه امكان انجام تبديلات بين انواع غيرسازگار هم وجود دارد براي انجام اينكار ، بايد از تبديل cast استفاده كنيد كه امكان يك تبديل صريح بين انواع غير سازگار را بوجود مي آورد.

تبديل خودكار در جاوا Java's Automatic conversions

هنگامي كه يك نوع داده به يك متغير از نوع ديگر نسبت داده مي شود ، اگر دو شرط زير فراهم باشد ، يك تبديل خودكار نوع انجام خواهد شد
1-دو نوع با يكديگر سازگار باشند . 2- نوع مقصد بزرگتر از نوع منبع باشد .
هنگامي كه اين دو شرط برقرار باشد ، يك تبديل پهن كننده (widening) اتفاق مي افتد. براي مثال نوع int همواره باندازه كافي بزرگ است تا كليه مقادير معتبر byte را دربرگيرد، بنابراين نيازي به دستور صريح تبديل cast وجود ندارد. در تبديلات پهن كننده ، انواع رقمي شامل انواع عدد صحيح و عدد اعشاري با هر يك از انواع سازگاري دارند. اما انواع رقمي با انواع char و boolean سازگار نيستند. همچنين انواع char و boolean با يكديگر سازگار نيستند. جاوا هنگام ذخيره سازي يك ثابت عدد صحيح لفظي (Literal integer constant) به متغيرهایي از انواع byte، short و long يك تبديل خودكار نوع را انجام مي دهد.

تبديل غير خودكار انواع ناسازگار

اگر چه تبديلات خودكار انواع بسيار سودمند هستند ، اما جواب‌گوي همه نيازها نيستند. برای مثال ، ممكن است بخواهيد يك مقدار int را به يك متغير byte نسبت دهيد. اين تبديل بطور خودكار انجام نمي گيرد، زيرا يك byte از int كوچكتر است. اين نوع خاص از تبديلات را گاهي تبديل باريك كننده (narrowing conversions) مي نامند زيرا بطور صريح مقدار را آنقدر باريك تر و كم عرض تر مي كنيد تا با نوع هدف سازگاري يابد. براي ايجاد يك تبديل بين دو نوع ناسازگار ، بايد از cast استفاده نماييد. cast يك تبديل نوع كاملاً صريح است .

شکل عمومی تبدیل cast

( target - type )value

نوع مقصد يا هدف : در اينجا نوع هدف ، همان نوعي است كه مايليم مقدار مشخص شده را به آن تبديل كنيم. بعنوان مثال ، قطعه زير از يك برنامه تبديل غير خودكار از int به byte را اجرا مي كند. اگر مقدار integer بزرگتر از دامنه يك byte باشد ، اين مقدار به مدول ( باقيمانده تقسيم يك integer بر دامنه ) byte كاهش خواهد يافت.

تبديل غير خودكار از int به byte

int a;
byte b;
b =( byte )a;

بريدن ( truncation ) : هرگاه كه يك مقدار اعشاري به يك عدد صحيح نسبت داده شود ، شكل ديگري از تبديل اتفاق مي افتد که به آن بريدن(truncation) می گویند. همانطور که مي دانيد، اعداد صحيح داراي قسمت اعشاري نيستند. بنابراين هنگاميكه يك مقدار اعشاري به يك نوع عدد صحيح نسبت داده مي شود، جزء اعشاري از بين خواهد رفت(بريده خواهد شد). مثلاً اگر مقدار 1/23 را به يك عدد صحيح نسبت دهيم ، مقدار حاصله فقط عدد 1 مي باشد و مقدار 0/23 بريده خواهد شد. البته اگر اندازه اجزا عدد كلي آنچنان بزرگ باشد كه در نوع عدد صحيح مقصد نگنجد ، آنگاه مقدار فوق به مدول دامنه نوع هدف كاهش خواهد يافت .

برخي از تبديلات انواع ، كه مستلزم تبديل cast مي باشند

// Demonstrate casts.
class Conversion {
public static void main(String args[] ){
bytt b;
int i = 257;
double d = 323.142;
System.out.println("\nConversion of int to byte.");
b =( byte )i;
System.out.println("i and b " + i + " " + b);
System.out.println("\nConversion of double to int.");
i =( int )d;
System.out.println("d and i " + d + " " + i);
System.out.println("\nConversion of double to byte.");
b =( byte )d;
System.out/println("d and b " + d + " " + b);
} }

نتیجه به صورت زیر می باشد

Conversion of int to byte.
i and b 257 1

Conversion of double to int.
d and i 323.142 323

Conversion of double to byte.
d and b 323.142 67



نظرات کاربران



عبارت امنیتی : حاصل 6 × 2 می شود :
متن پیام :