Output af Java-program | Sæt 5

Forudsige outputtet af følgende Java-programmer.
Program 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   

Produktion :

String 


Forklaring : I tilfælde af metode overbelastning den mest specifikke metode vælges på kompileringstidspunktet. Da 'java.lang.String' er en mere specifik type end 'java.lang.Object'. I dette tilfælde vælges metoden, der tager 'String' som parameter. 
Program 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   

Produktion:  
 

Compile Error at line 19. 


Forklaring: I dette tilfælde af metode Overbelastning den mest specifikke metode vælges på kompileringstidspunktet. 
Da 'java.lang.String' og 'java.lang.Integer' er en mere specifik type end 'java.lang.Object', men mellem 'java.lang.String' og 'java.lang.Integer' er ingen mere specifik. 
I dette tilfælde er Java ikke i stand til at bestemme, hvilken metode der skal kaldes. 
Program 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   

Produktion: 
 

abcd abc false abcd abcd true 


Forklaring: I Java er streng uforanderlig, og strengbuffer kan ændres. 
Så streng s2 og s1 peger begge på den samme streng abc. Og efter at have foretaget ændringerne, peger strengen s1 på abcd og s2 peger på abc, derfor falsk. Mens der er i strengbuffer, peger både sb1 og sb2 på det samme objekt. Da strengbuffer kan ændres, foretager ændringer i en streng også ændringer i den anden streng. Så begge strenge peger stadig på det samme objekt efter at have foretaget ændringerne til objektet (her sb2).
Program 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   

Produktion:  
 

Compile Error at line 8 


Forklaring:  
1. I linje 12 '' i println bevirker, at tallene automatisk castes som strenge. Så den tilføjer ikke, men føjes sammen som en streng. 
2. I Line11 laver += en automatisk cast til en kort. Tallet 123456 kan dog ikke være indeholdt i en short, så du ender med en negativ værdi (-7616). 
(BEMÆRK - kort 2 bytes -32768 til 32767) Her betyder tallet 123456 ikke, at værdien af ​​int zit viser længden af ​​int-værdien 
3. De to andre er dog røde sild, da koden aldrig vil kompilere på grund af linje 8. 
Ethvert tal, der begynder med nul, behandles som et oktalt tal (som er 0-7).
 

Opret quiz