Java-ohjelman tulos | Sarja 5

Ennusta seuraavien Java-ohjelmien tulos.
Ohjelma 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   

Lähtö :

String 


Selitys : Siinä tapauksessa menetelmän ylikuormitus tarkin menetelmä valitaan käännöshetkellä. Koska 'java.lang.String' on tarkempi tyyppi kuin 'java.lang.Object'. Tässä tapauksessa valitaan menetelmä, joka ottaa parametriksi "String". 
Ohjelma 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   

Lähtö:  
 

Compile Error at line 19. 


Selitys: Tässä tapauksessa menetelmä Ylikuormitus tarkin menetelmä valitaan käännöshetkellä. 
Koska "java.lang.String" ja "java.lang.Integer" ovat tarkempi tyyppi kuin "java.lang.Object", mutta "java.lang.String" ja "java.lang.Integer" välillä ei ole tarkempaa. 
Tässä tapauksessa Java ei pysty päättämään, mitä menetelmää kutsua. 
Ohjelma 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   

Lähtö: 
 

abcd abc false abcd abcd true 


Selitys: Javassa String on muuttumaton ja merkkijonopuskuri muuttuva. 
Joten merkkijono s2 ja s1 osoittavat molemmat samaan merkkijonoon abc. Ja muutosten tekemisen jälkeen merkkijono s1 osoittaa abcd:lle ja s2 osoittaa abc:lle, joten se on epätosi. Merkkijonopuskurissa sekä sb1 että sb2 osoittavat molemmat samaan objektiin. Koska merkkijonopuskurit ovat muutettavissa, yhden merkkijonon muutokset tekevät muutoksia myös toiseen merkkijonoon. Joten molemmat merkkijonot osoittavat edelleen samaan objektiin objektiin tehtyjen muutosten jälkeen (tässä sb2).
Ohjelma 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   

Lähtö:  
 

Compile Error at line 8 


Selitys:  
1. Rivillä 12 Println:n ''-merkki saa numerot valettua automaattisesti merkkijonoina. Joten se ei tee summaa, vaan liittää yhteen merkkijonona. 
2. Linjassa 11 += tekee automaattisen heiton lyhyeksi. Numeroa 123456 ei kuitenkaan voida sisällyttää lyhyeen, joten saat negatiivisen arvon (-7616). 
(HUOM - lyhyt 2 tavua -32768 - 32767) Tässä numero 123456 ei tarkoita, että int zit:n arvo näyttää int-arvon pituuden 
3. Nuo kaksi muuta ovat punaisia ​​silakkaa, koska koodia ei koskaan käännetä rivin 8 vuoksi. 
Mitä tahansa nollalla alkavaa lukua käsitellään oktaalilukuna (joka on 0-7).
 

Luo tietokilpailu