logo

إخراج برنامج جافا | مجموعة 5

التنبؤ بمخرجات برامج جافا التالية.
البرنامج 1:  
 

Java
// Main.java public class Main {  public static void gfg(String s)  {   System.out.println('String');  }  public static void gfg(Object o)  {  System.out.println('Object');  }  public static void main(String args[])  {  gfg(null);  } } //end class 

الإخراج :

String


توضيح : في حالة طريقة التحميل الزائد يتم اختيار الطريقة الأكثر تحديدًا في وقت الترجمة. نظرًا لأن "java.lang.String" هو نوع أكثر تحديدًا من "java.lang.Object". في هذه الحالة يتم اختيار الطريقة التي تأخذ "سلسلة" كمعلمة. 
البرنامج 2:  
 



Java
// Main.java public class Main {  public static void gfg(String s)  {   System.out.println('String');  }  public static void gfg(Object o)  {  System.out.println('Object');  }  public static void gfg(Integer i)  {  System.out.println('Integer');  }  public static void main(String args[])  {  gfg(null);  } } //end class 

الإخراج:  
 

Compile Error at line 19.


توضيح: في هذه الحالة طريقة التحميل الزائد يتم اختيار الطريقة الأكثر تحديدًا في وقت الترجمة. 
نظرًا لأن "java.lang.String" و"java.lang.Integer" هو نوع أكثر تحديدًا من "java.lang.Object" ولكن بين "java.lang.String" و"java.lang.Integer"، لا يوجد شيء أكثر تحديدًا. 
في هذه الحالة، Java غير قادر على تحديد الطريقة التي سيتم الاتصال بها. 
البرنامج 3:  
 

Java
// Main.java public class Main {  public static void main(String args[])  {  String s1 = 'abc';  String s2 = s1;  s1 += 'd';  System.out.println(s1 + ' ' + s2 + ' ' + (s1 == s2));  StringBuffer sb1 = new StringBuffer('abc');  StringBuffer sb2 = sb1;  sb1.append('d');  System.out.println(sb1 + ' ' + sb2 + ' ' + (sb1 == sb2));  } } //end class 

الإخراج: 
 

abcd abc false abcd abcd true


توضيح : في Java، السلسلة غير قابلة للتغيير والمخزن المؤقت للسلسلة قابل للتغيير. 
لذا تشير كل من السلسلة s2 وs1 إلى نفس السلسلة abc. وبعد إجراء التغييرات، تشير السلسلة s1 إلى abcd وتشير s2 إلى abc ومن ثم فهي خاطئة. أثناء وجودهما في المخزن المؤقت للسلسلة، يشير كل من sb1 وsb2 إلى نفس الكائن. نظرًا لأن المخزن المؤقت للسلسلة قابل للتغيير، فإن إجراء تغييرات في سلسلة واحدة يؤدي أيضًا إلى إجراء تغييرات على السلسلة الأخرى. لذلك لا تزال كلتا السلسلتين تشيران إلى نفس الكائن بعد إجراء التغييرات على الكائن (هنا sb2).
البرنامج 4:  
 

Java
// Main.java public class Main {  public static void main(String args[])  {  short s = 0;  int x = 07;  int y = 08;  int z = 112345;  s += z;  System.out.println('' + x + y + s);  } } //end class 

الإخراج:  
 

Compile Error at line 8


توضيح:  
1. في السطر 12، يؤدي "" في println إلى تحويل الأرقام تلقائيًا إلى سلاسل. لذا فهي لا تقوم بعملية الإضافة ولكنها تُلحق معًا كسلسلة. 
2. في Line11، يقوم += بإجراء تحويل تلقائي إلى مسافة قصيرة. ومع ذلك، لا يمكن احتواء الرقم 123456 ضمن مسافة قصيرة، لذا ينتهي بك الأمر بقيمة سالبة (-7616). 
(ملاحظة - اختصار 2 بايت -32768 إلى 32767) هنا الرقم 123456 لا يعني أن قيمة int zit تظهر طول قيمة int 
3. هذان الاثنان الآخران عبارة عن رنجة حمراء ولكن لن يتم تجميع الكود أبدًا بسبب السطر 8. 
يتم التعامل مع أي رقم يبدأ بالصفر كرقم ثماني (وهو 0-7).
 

حجم شاشتي