Изход на 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“. В този случай се избира методът, който приема 'String' като параметър. 
Програма 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, следователно е 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).
 

Създаване на тест