تبدیل نوع در جاوا
تبدیل نوع (Type Casting) تکنیکی است که یا توسط کامپایلر یا توسط برنامهنویس برای تبدیل یک نوع داده به نوع دیگر در زبان جاوا استفاده میشود. تبدیل نوع همچنین با عنوان تبدیل نوع داده (Type Conversion) نیز شناخته میشود. برای مثال، تبدیل int به double، double به int، short به int و غیره.
در زبان برنامهنویسی جاوا، دو نوع تبدیل نوع مجاز وجود دارد:
- تبدیل نوع گسترده (Widening Type Casting)
- تبدیل نوع محدود (Narrowing Type Casting)
تبدیل نوع گسترده (Widening Type Casting)
تبدیل نوع گسترده که به آن تبدیل نوع ضمنی (Implicit Type Casting) نیز گفته میشود، زمانی است که یک نوع کوچکتر به یک نوع بزرگتر تبدیل میشود و این کار بهصورت خودکار توسط کامپایلر انجام میگیرد.
سلسلهمراتب
در اینجا سلسلهمراتب تبدیل نوع گسترده در جاوا آورده شده است:
byte>short>char>int>long>float>double
کامپایلر در تبدیل نوع نقش ایفا میکند به جای برنامهنویس. این کار نوع متغیرها را در زمان کامپایل تغییر میدهد. همچنین، تبدیل نوع فقط از نوع داده کوچک به نوع داده بزرگ انجام میشود.
مثال
در این مثال، یک عدد صحیح (integer) و یک عدد اعشاری (double) را با هم جمع کرده و نتیجه را در یک متغیر از نوع double ذخیره میکنیم تا مجموع را نمایش دهیم. در حین جمع، عدد صحیح به طور ضمنی به نوع double تبدیل میشود:
package com.tutorialspoint;
public class Tester {
// Main driver method
public static void main(String[] args) {
// Define int variables
int num1 = 5004;
double num2 = 2.5;
double sum = num1 + num2;
// show output
System.out.println("The sum of " + num1 + " and " + num2 + " is " + sum);
}
}
کد را کامپایل و اجرا کنید. این کار نتیجه زیر را تولید میکند:
خروجی
مجموع 5004 و 2.5 برابر با 5006.5 است خطای تبدیل نوع
خطای تبدیل
خطای تبدیل نوع زمانی رخ میدهد که سعی کنید یک مقدار از نوع داده بزرگتر را به یک متغیر از نوع داده کوچکتر بدون تبدیل صریح اختصاص دهید.
کامپایلر جاوا تبدیل نوع ضمنی را هنگام تخصیص مقادیر بین انواع سازگار انجام میدهد، اما اجازه نمیدهد که تبدیل از نوع داده بزرگتر به نوع داده کوچکتر بدون تبدیل نوع صریح انجام شود.
مثال
در مثال زیر، نشان دادهایم که میتوانیم یک خطا دریافت کنیم زمانی که کامپایلر سعی میکند یک نوع داده بزرگتر را به یک نوع داده کوچکتر تبدیل کند. در اینجا، متغیر num1 از نوع صحیح و num2 از نوع اعشاری است. مجموع num1 و num2 از نوع double خواهد بود و زمانی که سعی میکنیم آن را در مجموع از نوع int ذخیره کنیم، کامپایلر خطا میدهد.
package com.tutorialspoint;
public class Tester {
// Main driver method
public static void main(String[] args) {
// Define int variables
int num1 = 5004;
double num2 = 2.5;
int sum = num1 + num2;
// show output
System.out.println("The sum of " + num1 + " and " + num2 + " is " + sum);
}
}
کد را کامپایل و اجرا کنید. این کار نتیجه زیر را تولید میکند:
خروجی
استثنا در رشته “main” java.lang.Error: مشکل کامپایل حل نشده: ناسازگاری نوع: نمیتوان از double به int تبدیل کرد
در com.tutorialspoint.Tester.main(Tester.java:9)
تبدیل نوع محدود (Narrowing Type Casting)
تبدیل نوع محدود که به آن تبدیل نوع صریح (Explicit Type Casting) یا تبدیل نوع صریح داده (Explicit Type Conversion) نیز گفته میشود، توسط برنامهنویس بهصورت دستی انجام میشود. در تبدیل نوع محدود، یک نوع داده بزرگتر میتواند به یک نوع داده کوچکتر تبدیل شود.
وقتی که یک برنامهنویس نوع متغیر را هنگام نوشتن کد تغییر میدهد، میتوانیم از عملگر تبدیل نوع (cast operator) برای تغییر نوع متغیر استفاده کنیم. برای مثال، تبدیل double به int یا int به double.
نحو
در زیر نحو تبدیل نوع محدود (تبدیل دستی نوع داده) آمده است:
double doubleNum = (double) num;
عبارت کد بالا متغیر را به نوع double تبدیل خواهد کرد.
مثال
در مثال زیر، متغیر num از نوع صحیح تعریف شده و با مقدار اولیهای مقداردهی میشود. همچنین، متغیر doubleNum از نوع double تعریف شده و مقدار متغیر num پس از تبدیل به double در آن ذخیره میشود.
سپس، متغیر convertedInt از نوع صحیح (int) ایجاد کردهایم و مقدار double را پس از تبدیل نوع به int در آن ذخیره کردهایم. در خروجی، میتوانیم مقدار متغیرهای double و int را مشاهده کنیم.
package com.tutorialspoint;
public class Tester {
// Main driver method
public static void main(String[] args) {
// Define int variable
int num = 5004;
// Type casting int to double
double doubleNum = (double) num;
// show output
System.out.println("The value of " + num + " after converting to the double is " + doubleNum);
// Type casting double to int
int convertedInt = (int) doubleNum;
// show output
System.out.println("The value of " + doubleNum + " after converting to the int again is " + convertedInt);
}
}
کد را کامپایل و اجرا کنید. این کار نتیجه زیر را تولید میکند:
خروجی
مقدار 5004 پس از تبدیل به double برابر با 5004.0 است مقدار 5004.0 پس از تبدیل مجدد به int برابر با 5004 است