تبدیل نوع در جاوا
تبدیل نوع (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 است