Utgang av Java-program | Sett 5

Forutsi resultatet av 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   

Produksjon :

String 


Forklaring : I tilfelle av metode overbelastning den mest spesifikke metoden velges ved kompilering. Siden 'java.lang.String' er en mer spesifikk type enn 'java.lang.Object'. I dette tilfellet velges 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   

Produksjon:  
 

Compile Error at line 19. 


Forklaring: I dette tilfellet av metode Overbelastning den mest spesifikke metoden velges ved kompilering. 
Siden 'java.lang.String' og 'java.lang.Integer' er en mer spesifikk type enn 'java.lang.Object', men mellom 'java.lang.String' og 'java.lang.Integer' er ingen mer spesifikk. 
I dette tilfellet er ikke Java i stand til å bestemme hvilken metode som skal kalles. 
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   

Produksjon: 
 

abcd abc false abcd abcd true 


Forklaring: I Java er streng uforanderlig og strengbuffer kan endres. 
Så streng s2 og s1 peker begge til samme streng abc. Og etter å ha gjort endringene peker strengen s1 til abcd og s2 peker på abc, derav usant. Mens i strengbuffer peker både sb1 og sb2 til det samme objektet. Siden strengbuffer kan endres, gjør endringer i en streng også endringer i den andre strengen. Så begge strengene peker fortsatt til det samme objektet etter å ha gjort endringene i 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   

Produksjon:  
 

Compile Error at line 8 


Forklaring:  
1. På linje 12 '' i println fører til at tallene automatisk kastes som strenger. Så den legger ikke til, men legger sammen som en streng. 
2. I Line11 kaster += automatisk til en kortfilm. Tallet 123456 kan imidlertid ikke inneholdes i en short, så du ender opp med en negativ verdi (-7616). 
(MERK - kort 2 byte -32768 til 32767) Her betyr ikke tallet 123456 at verdien av int zit viser lengden på int-verdien 
3. De to andre er røde sild, men siden koden aldri vil kompileres på grunn av linje 8. 
Ethvert tall som begynner med null, behandles som et oktalt tall (som er 0-7).
 

Lag quiz