تبدیل ضمنی
تبدیل ضمنی یا تبدیل بزرگ کننده یا widening conversion، یک نوع تبدیل است که به طور خودکار انجام میشود. در این نوع تبدیل در صورتی یک متغیر از یک نوع داده میتواند به یک نوع دیگر تبدیل شود که مقدار آن از مقدار دادهای که میخواهد به آن تبدیل شود کمتر باشد. به عنوان مثال نوع دادهای byte میتواند مقادیر 0 تا 255 را در خود ذخیره کند و نوع دادهای int مقادیر 2147483648- تا 2147483647 را شامل میشود. پس میتوانید یک متغیر از نوع byte را به یک نوع int تبدیل کنید :
byte number1 = 5; int number2 = number1;
در مثال بالا مقدار number1 برابر 5 است در نتیجه متغیر number2 که یک متغیر از نوع صحیح است میتواند مقدار number1 را در خود ذخیره کند چون نوع صحیح از نوع بایت بزرگتر است. پس متغیر number1 که یک متغیر از نوع بایت است میتواند به طور ضمنی به number2 که یک متغیر از نوع صحیح است تبدیل شود. اما عکس مثال بالا صادق نیست.
int number1 = 5; byte number2 = number1;
در این مورد ما با خطا مواجه میشویم. اگر چه مقدار 5 متغیر number1 در محدوده مقادیر byte یعنی اعداد بین 255-0 قرار دارد اما متغیری از نوع بایت حافظه کمتری نسبت به متغیری از نوع صحیح اشغال میکند. نوع byte شامل 8 بیت یا 8 رقم دودویی است در حالی که نوع int شامل 32 بیت یا رقم باینری است. یک عدد باینری عددی متشکل از 0 و 1 است. برای مثال عدد 5 در کامپیوتر به عدد باینری 101 ترجمه میشود. بنابراین وقتی ما عدد 5 را در یک متغیر از نوع بایت ذخیره میکنیم عددی به صورت زیر نمایش داده میشود :
00000101
و وقتی آن را در یک متغیر از نوع صحیح ذخیره میکنیم به صورت زیر نمایش داده میشود :
00000000000000000000000000000101
بنابراین قرار دادن یک مقدار int، در یک متغیر byte، درست مانند این است که ما سعی کنیم که یک توپ فوتبال را در یک سوراخ کوچک گلف جای دهیم. برای قرار دادن یک مقدار int در یک متغیر از نوع byte میتوان از تبدیل صریح استفاه کرد که در درسهای آینده توضیح داده میشود. نکته دیگری که نباید فراموش شود این است که شما نمیتوانید اعداد با ممیز اعشار را به یک نوع int تبدیل کنید چون این کار باعث از بین رفتن بخش اعشاری این اعداد میشود.
double number1 = 5.25; int number2 = number1; //Error
تبدیلاتی که جاوا به صورت ضمنی میتواند انجام دهد در زیر آمده است :
byte > short > int > long > float > double