Utdata från Java-program | Set 5

Förutsäg resultatet av följande Java-program.
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 


Förklaring : I fallet med metodöverbelastning den mest specifika metoden väljs vid kompilering. Eftersom 'java.lang.String' är en mer specifik typ än 'java.lang.Object'. I detta fall väljs metoden som tar '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. 


Förklaring: I detta fall av metod Överbelastning den mest specifika metoden väljs vid kompilering. 
Eftersom 'java.lang.String' och 'java.lang.Integer' är en mer specifik typ än 'java.lang.Object' men mellan 'java.lang.String' och 'java.lang.Integer' är ingen mer specifik. 
I det här fallet kan Java inte bestämma vilken metod som ska anropas. 
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 


Förklaring: I Java är sträng oföränderlig och strängbuffert är föränderlig. 
Så sträng s2 och s1 pekar båda på samma sträng abc. Och efter att ha gjort ändringarna pekar strängen s1 på abcd och s2 pekar på abc, alltså false. I strängbuffert pekar både sb1 och sb2 på samma objekt. Eftersom strängbuffertar är föränderliga gör ändringar i en sträng också ändringar i den andra strängen. Så båda strängarna pekar fortfarande på samma objekt efter att ha gjort ändringarna i objektet (här 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 


Förklaring:  
1. På rad 12 '' i println gör att siffrorna automatiskt kastas som strängar. Så det gör inte addition utan lägger ihop som en sträng. 
2. I Line11 gör += ett automatiskt kast till en kort. Däremot kan numret 123456 inte finnas i en kortslutning så du får ett negativt värde (-7616). 
(OBS - korta 2 byte -32768 till 32767) Här betyder siffran 123456 inte att värdet på int zit visar längden på int-värdet 
3. De andra två är dock röda strömming eftersom koden aldrig kommer att kompileras på grund av rad 8. 
Alla tal som börjar med noll behandlas som ett oktalt tal (vilket är 0-7).
 

Skapa frågesport