جاوا انواع دادههای مختلفی را ارائه میکند (مانند تقریباً هر زبان پویا دیگری) مانند boolean، char، int، unsigned int، signed int، float، double، long و … و در مجموع ۷ نوع، که در آن هر نوع داده فضای متفاوتی را در حین ذخیره در حافظه به دست میآورد. وقتی مقداری از یک نوع داده را به دیگری اختصاص می دهید، ممکن است این دو نوع با یکدیگر سازگار نباشند. اگر انواع دادهها با هم سازگار باشند، جاوا تبدیل را بهطور خودکار انجام میدهد که به عنوان تبدیل خودکار نوع شناخته میشود، و در غیر این صورت، باید به طور صریح تبدیل شوند. مثل اختصاص یک مقدار int به یک متغیر long.
آموزش مرتبط: آموزش جاوا
| نوع داده | مقدار بیتی که در حافظه اشغال می شود |
|---|---|
| boolean | 1 |
| byte | 8 (1 byte) |
| char | 16 (2 bytes) |
| short | 16(2 bytes) |
| int | 32 (4 bytes) |
| long | 64 (8 bytes) |
| float | 32 (4 bytes) |
| double | 64 (8 bytes) |
گسترش یا تبدیل خودکار نوع
تبدیل گسترده زمانی صورت می گیرد که دو نوع داده به طور خودکار تبدیل شوند. این زمانی اتفاق می افتد که:
- این دو نوع داده با هم سازگار هستند.
- وقتی مقدار یک نوع داده کوچکتر را به یک نوع داده بزرگتر اختصاص می دهیم.
به عنوان مثال، در جاوا، انواع داده های عددی با یکدیگر سازگار هستند، اما هیچ تبدیل خودکار از نوع عددی به char یا boolean پشتیبانی نمی شود. همچنین char و boolean با یکدیگر سازگار نیستند.

خروجی:
Int value 100
Long value 100
Float value 100.0
تبدیل محدود یا صریح
اگر بخواهیم مقدار یک نوع داده بزرگتر را به یک نوع داده کوچکتر اختصاص دهیم، عملیات تبدیل یا محدود کردن نوع صریح را انجام می دهیم.
- این برای انواع داده های ناسازگار که در آن تبدیل خودکار نمی تواند انجام شود مفید است.
- در اینجا نوع داده هدف، نوع مورد نظر برای تبدیل مقدار مشخص شده را مشخص می کند.

کاراکتر و عدد با هم سازگار نیستند. بیایید ببینیم زمانی که می خواهیم یکی را به دیگری تبدیل کنیم چه اتفاقی رخ می دهد.
خروجی: یک خطا ایجاد خواهد شد

این خطا به این دلیل ایجاد می شود که یک متغیر عدد صحیح 4 بایت حجم دارد، در حالی که نوع داده کاراکتر به 2 بایت نیاز دارد. ما سعی می کنیم داده ها را از 4 بایت به 2 بایت رسم کنیم که امکان پذیر نیست.
چگونه تبدیل صریح انجام دهیم؟
برای انجام تبدیل صریح، نوع داده مقصد را در یک پرانتز قبل از متغیر مبدأ می نویسیم. مثلاً اگر بخواهیم یک داده double را به یک داده long یا int تبدیل صریح کنیم به شکل زیر عمل می کنیم.
خروجی:
Double value 100.04
Long value 100
Int value 100
توجه: در هنگام اختصاص دادن مقدار به نوع بایت، بخش کسری از بین می رود و به مدول 256 (محدوده بایت) کاهش می یابد.
مثال
خروجی
Conversion of int to byte.
i = 257 b = 1
Conversion of double to byte.
d = 323.142 b= 67
ارتقاء نوع داده در محاسبات
در حین محاسبات بین داده ها، ممکن است مقدار داده خروجی از محاسبات، از محدوده عملوندها فراتر رود و از این رو نوع داده خروجی ارتقا می یابد. برخی از شرایط برای ارتقای نوع عبارتند از:
- جاوا هنگام ارزیابی یک عبارت به طور خودکار هر عملوند byte، short یا char را به int ارتقا می دهد.
- اگر یک عملوند long، float یا double باشد، کل عبارت به ترتیب به long، float یا double ارتقا می یابد.
مثال:
خروجی
result = 626.7784146484375
تبدیل نوع صریح در محاسبات
هنگام انجام محاسبات، نتیجه به طور خودکار به یک نوع داده بزرگتر از عملوند به روز می شود. اما اگر آن نتیجه را در هر نوع داده کوچکتری ذخیره کنیم، یک خطای زمان کامپایل ایجاد می کند، به همین دلیل باید نوع داده نتیجه را تبدیل صریح کنیم.
مثال:
خروجی
100
نکته: در مورد عملوندهای منفرد، نتیجه به int تبدیل میشود و بر اساس آن، مانند مثال بالا، نوع آن تبدیل صریح میشود.
دیدگاهها