Java programının çıktısı | 5'i ayarla

Aşağıdaki Java Programlarının çıktısını tahmin edin.
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   

Çıkış :

String 


Açıklama : Şu durumda yöntem aşırı yüklemesi derleme zamanında en spesifik yöntem seçilir. 'Java.lang.String', 'java.lang.Object'ten daha spesifik bir tür olduğundan. Bu durumda 'String'i parametre olarak alan yöntem seçilir. 
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   

Çıkış:  
 

Compile Error at line 19. 


Açıklama: Bu durumda yöntem Aşırı yükleme derleme zamanında en spesifik yöntem seçilir. 
'Java.lang.String' ve 'java.lang.Integer', 'java.lang.Object'ten daha spesifik bir tür olduğundan, 'java.lang.String' ve 'java.lang.Integer' arasında hiçbiri daha spesifik değildir. 
Bu durumda Java hangi yöntemin çağrılacağına karar veremez. 
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   

Çıkış: 
 

abcd abc false abcd abcd true 


Açıklama : Java'da String değişmez ve dize arabelleği değiştirilebilir. 
Yani s2 dizisi ve s1 dizisinin her ikisi de aynı abc dizisine işaret ediyor. Ve değişiklikleri yaptıktan sonra s1 dizgesi abcd'yi ve s2 dizgesi abc'yi işaret eder, dolayısıyla yanlıştır. Dize arabelleğindeyken hem sb1 hem de sb2 aynı nesneyi işaret eder. Dize arabelleği değiştirilebilir olduğundan, bir dizede değişiklik yapmak diğer dizede de değişiklik yapar. Yani nesnede değişiklik yaptıktan sonra her iki dize de hala aynı nesneyi işaret ediyor (burada 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   

Çıkış:  
 

Compile Error at line 8 


Açıklama:  
1. 12. Satırda Println'deki '', sayıların otomatik olarak dize olarak dönüştürülmesine neden olur. Yani toplama yapmaz ancak dize olarak birbirine eklenir. 
2. Satır 11'de += kısa devreyi otomatik olarak değiştirir. Ancak 123456 sayısı kısa devrenin içinde yer alamaz, dolayısıyla negatif bir değerle (-7616) karşılaşırsınız. 
(NOT - kısa 2 bayt -32768 ila 32767) Burada 123456 sayısı int değerinin uzunluğu anlamına gelmez, zit int değerinin uzunluğunu gösterir 
3. Diğer ikisi kırmızı ringa balığıdır, ancak kod 8. satır nedeniyle hiçbir zaman derlenmeyecektir. 
Sıfırla başlayan herhangi bir sayı, sekizlik bir sayı (0-7 arası) olarak kabul edilir.
 

Test Oluştur