ما هو نوع الصب في جافا؟
نوع البيانات عبارة عن مجموعة محددة مسبقًا من القيم التي تحدد نوع القيم التي يمكن تخزينها فيها بالإضافة إلى العملية التي يمكن تنفيذها عليها.لماذا يعد صب النوع مطلوبًا؟
تحتوي Java على أنواع بيانات بدائية مختلفة تتطلب مساحات مختلفة في الذاكرة. يمكن أن يسبب هذا مشكلات في التوافق أثناء تعيين قيمة من نوع بيانات إلى آخر. إذا كانت أنواع البيانات متوافقة بالفعل، فسيتم إجراء عملية الكتابة تلقائيًا بواسطة المترجم. وبالتالي، فإن التلبيس يحل مشكلة التوافق الرئيسية عند التعامل مع أنواع البيانات المختلفة في برنامجنا.أنواع صب نوع جافا
هناك نوعان من نوع الصب في Java.- توسيع نوع الصب - يُعرف أيضًا باسم صب النوع الضمني أو التلقائي
- تضييق النوع - يُعرف أيضًا باسم النوع الصريح أو اليدوي
توسيع نوع الصب
يشير توسيع الكتابة، كما يوحي الاسم، إلى توسيع نوع بيانات أصغر إلى نوع بيانات أكبر. نقوم بتنفيذ عملية التلبيس هذه عندما نريد تحويل نوع صغير إلى نوع كبير. يجب أن تكون أنواع البيانات متوافقة مع بعضها البعض. لا يوجد تحويل ضمني من النوع الرقمي إلى النوع char أو المنطقي. في Java، أنواع char وboolean غير متوافقة.
بايت -> قصير -> شار -> إنت -> طويل -> تعويم -> مزدوج
يتم إجراء هذا النوع من الصب تلقائيًا بواسطة المترجم دون أي فقدان للمعلومات. لا يتطلب أي مشغل خارجي من قبل المبرمج.
مثال
//Automatic type conversion
public class WideningExample {
public static void main(String[] args) {
int i = 100;
System.out.println("int value: " + i);
// int to long type
long l = i;
System.out.println("int to long value: " + l);
// long to float type
float f = l;
System.out.println("int to float value: " + f);
byte b = 1;
System.out.println("byte value: " + b);
// byte to int type
i = b;
System.out.println("byte to int value: " + i);
char c = 'a';
System.out.println("char value: " + c);
// char to int type
i = c;
// prints the ASCII value of the given character
// ASCII value of 'a' = 97
System.out.println("char to int value: " + i);
}
}
انتاج |
قيمة int: 100 int إلى قيمة طويلة: 100 int إلى القيمة العائمة: 100.0 قيمة بايت: 1 بايت إلى قيمة int: 1 قيمة char: char إلى قيمة int: 97
توضيح
في الكود أعلاه، أظهرنا توسيع الكتابة التي يتم إجراؤها بواسطة المترجم تلقائيًا. أولًا، قمنا بتعيين قيم إلى int و byte و char . ثم قمنا بتعيين قيم int إلى long و float ، وكلاهما أكبر من int . لقد قمنا أيضًا بتعيين قيم البايت والشار إلى int . يعد كل من byte و char أنواع بيانات أصغر من int ، وبالتالي، كانت هذه التحويلات ضمنية.تضييق نوع الصب
يشير تضييق التلبيس، كما يوحي الاسم، إلى تضييق نوع بيانات أكبر إلى نوع بيانات أصغر. نقوم بتنفيذ عملية التلبيس هذه عندما نريد تحويل نوع كبير إلى نوع صغير.
مزدوج -> تعويم -> طويل -> إنت -> شار -> قصير -> بايت
بالنسبة لهذا النوع من الإرسال، فإننا نتجاوز التحويل الافتراضي لجافا عن طريق تحديد التحويل الخاص بنا. ولتحقيق ذلك، نكتب المتغير أو القيمة التي تحتاج إلى كتابتها مسبوقة بنوع البيانات الهدف بين قوسين '()'. ومع ذلك، فإن هذا النوع من الصب قد يؤدي إلى فقدان محتمل للدقة.
مثال
//Manual Type Conversion
public class NarrowingExample {
public static void main(String[] arg) {
// double data type
double d = 97.04;
// Print statements
System.out.println("double value: " + d);
// Narrowing type casting from double to long
// implicitly writing the target data type in () followed by initial data type
long l = (long) d;
// fractional part lost - loss of precision
System.out.println("long value: " + l);
// Narrowing type casting from double to int
// implicitly writing the target data type in () followed by initial data type
int i = (int) l;
// fractional part lost - loss of precision
System.out.println("int value: " + i);
// Narrowing type casting from double to int
// implicitly writing the target data type in () followed by initial data type
char c = (char) i;
// displaying character corresponding to the ASCII value of 100
System.out.println("char value: " + c);
}
}
انتاج |
القيمة المزدوجة: 97.04 القيمة الطويلة: 97 قيمة int: 97 قيمة الحرف: أ
GO TO FULL VERSION