العودة إلى الدورة

تحويل الأنواع (Type Casting) والتحويل الضمني مقابل الصريح

إتقان لغة Java: من الصفر إلى مطور محترف (رحلة من 50 درساً)

الدرس 9: تحويل الأنواع (Type Casting)

تحويل النوع هو عملية تغيير قيمة من نوع بيانات إلى آخر.

1. التحويل الضمني (Widening Conversion)

يحدث هذا تلقائياً عند تحويل نوع أصغر إلى نوع أكبر (مثل int إلى double). تقوم Java بذلك تلقائياً لأنه لا يوجد خطر من فقدان البيانات.

java int myInt = 100; double myDouble = myInt; // تحويل ضمني: 100 تصبح 100.0

// ترتيب التوسيع (آمن): byte -> short -> int -> long -> float -> double

long largeNum = 500000; float approxNum = largeNum; // صالح، ولكن قد تفقد الدقة إذا كان الرقم ضخماً جداً

2. التحويل الصريح (Narrowing Conversion)

يتطلب هذا إرشاد المترجم يدوياً باستخدام الأقواس (). وهو ضروري عند تحويل نوع أكبر إلى نوع أصغر (مثل double إلى int). فقدان البيانات ممكن في هذه الحالة.

java double salary = 50000.75;

// تحويل صريح للـ double إلى int int wholeSalary = (int) salary; // ستكون القيمة 50000 (سيُفقد الجزء العشر .75)

byte b; int i = 257; // نجبر التحويل، لكن البيانات ستتغير بسبب صغر حجم الـ byte b = (byte) i;

System.out.println(b); // المخرج سيكون 1

3. التحويل الذي يتضمن النصوص (غير الأولية)

يتطلب تحويل الأنواع الأولية إلى نصوص (Strings) والعكس دوالاً مساعدة، عادةً من فئات التغليف (مثل Integer أو Double).

  • من نوع أولي إلى نص: java int num = 45; String s1 = String.valueOf(num); String s2 = num + ""; // اختصار شائع

  • من نص إلى نوع أولي: java String s = "123"; // استخدام دالة parse في فئة التغليف int i = Integer.parseInt(s);

    String priceStr = "99.50"; double price = Double.parseDouble(priceStr);