פלט של תוכנית Java | סט 5

חזה את הפלט של תוכניות Java הבאות.
תוכנית 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 String אינו ניתן לשינוי ומאגר המחרוזת ניתן לשינוי. 
אז מחרוזת 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. בשורה 11 ה-+= עושה השלכה אוטומטית לקצר. עם זאת, לא ניתן להכיל את המספר 123456 בתוך שורט, אז אתה מקבל ערך שלילי (-7616). 
(הערה - קצר של 2 בתים -32768 עד 32767) כאן המספר 123456 לא אומר שהערך של int zit מראה את אורך ערך int 
3. השניים האחרים האלה הם אדומים, עם זאת, מכיוון שהקוד לעולם לא יקמפל עקב שורה 8. 
כל מספר שמתחיל באפס מטופל כמספר אוקטלי (שהוא 0-7).
 

צור חידון