logo

פלט של תוכנית 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).
 

כיצד להחזיר מערך java