تبدیل نوع در جاوا (Java Type Casting)

تبدیل نوع در جاوا (Java Type Casting)
در جاوا، تبدیل نوع فرآیندی است که طی آن یک متغیر از یک نوع دادهای به نوع دیگری تبدیل میشود. این کار معمولاً زمانی استفاده میشود که نیاز باشد یک متغیر به طور موقت به نوع دادهای دیگری تبدیل شود.
دو نوع اصلی تبدیل نوع در جاوا وجود دارد:
۱. تبدیل گسترده (Widening Casting)
- تعریف: تبدیل یک نوع داده کوچکتر به یک نوع داده بزرگتر.
- ضمنی: این تبدیل به صورت خودکار توسط جاوا انجام میشود.
- بدون از دست رفتن داده: زیرا نوع مقصد میتواند همه مقادیر نوع مبدأ را نگه دارد.
ترتیب نوعهای دادهای برای تبدیل گسترده: byte → short → int → long → float → double
مثال:
public class WideningExample {
public static void main(String[] args) {
int num = 10;
double result = num; // int به طور خودکار به double تبدیل میشود
System.out.println(“Result: “ + result);
}
}
۲. تبدیل محدود (Narrowing Casting)
- تعریف: تبدیل یک نوع داده بزرگتر به یک نوع داده کوچکتر.
- صریح: نیاز به مداخله دستی برنامهنویس دارد.
- خطر از دست رفتن داده: زیرا نوع مقصد ممکن است نتواند تمام مقادیر نوع مبدأ را نگه دارد.
مثال:
public class NarrowingExample {
public static void main(String[] args) {
double num = 10.99;
int result = (int) num; // double به صورت صریح به int تبدیل میشود
System.out.println(“Result: “ + result); // خروجی: 10 (قسمت اعشاری حذف میشود)
}
}
تبدیل نوع برای نوعهای مرجع (Reference Types)
تبدیل نوع برای نوعهای مرجع نیز در جاوا استفاده میشود، بهویژه زمانی که با ارثبری یا اینترفیسها کار میکنید.
تبدیل به بالا (Upcasting)
- تبدیل ضمنی یک ارجاع از کلاس فرزند به کلاس والد.
- ایمن است و نیاز به تبدیل صریح ندارد.
مثال:
class Animal {
void sound() {
System.out.println(“Animal makes a sound”);
}
}
class Dog extends Animal {
void sound() {
System.out.println(“Dog barks”);
}
}
public class UpcastingExample {
public static void main(String[] args) {
Animal animal = new Dog(); // تبدیل به بالا
animal.sound(); // خروجی: Dog barks
}
}
تبدیل به پایین (Downcasting)
- تبدیل صریح یک ارجاع از کلاس والد به کلاس فرزند.
- نیاز به تبدیل صریح دارد و ممکن است ناامن باشد.
- اگر شیء از نوع هدف نباشد، خطای
ClassCastException
رخ میدهد.
مثال:
class Animal {
void sound() {
System.out.println(“Animal makes a sound”);
}
}
class Dog extends Animal {
void bark() {
System.out.println(“Dog barks”);
}
}
public class DowncastingExample {
public static void main(String[] args) {
Animal animal = new Dog(); // تبدیل به بالا
Dog dog = (Dog) animal; // تبدیل به پایین
dog.bark(); // تبدیل به پایین ایمن
}
}
نکات کلیدی
- تبدیل گسترده ایمن و خودکار است، در حالی که تبدیل محدود نیاز به تبدیل صریح دارد.
- در هنگام تبدیل محدود، مطمئن شوید که مقدار قابل تبدیل در محدوده نوع مقصد باشد تا از دست رفتن داده جلوگیری شود.
- تبدیل نوع مرجع معمولاً همراه با چندریختی (Polymorphism) استفاده میشود.
- همیشه از عملگر
instanceof
برای بررسی سازگاری نوع قبل از تبدیل به پایین استفاده کنید تا از بروز خطاهای زمان اجرا جلوگیری شود.
آیا نیاز به توضیح بیشتری در مورد بخش خاصی دارید؟
دیدگاهتان را بنویسید