Вихід програми 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, отже, false. Хоча в буфері рядків і 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).
 

Створіть вікторину