Java プログラムの出力 |セット5

以下の Java プログラムの出力を予測します。
プログラム 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   

出力 :

String 


説明 :の場合 メソッドのオーバーロード 最も具体的な方法がコンパイル時に選択されます。 「java.lang.String」は「java.lang.Object」よりも具体的な型であるため。この場合、「String」をパラメータとして受け取るメソッドが選択されます。 
プログラム 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   

出力:  
 

Compile Error at line 19. 


説明: この場合、 メソッドのオーバーロード 最も具体的な方法がコンパイル時に選択されます。 
「java.lang.String」と「java.lang.Integer」は「java.lang.Object」よりも具体的な型ですが、「java.lang.String」と「java.lang.Integer」の間には、より具体的な型はありません。 
この場合、Java はどのメソッドを呼び出すかを決定できません。 
プログラム 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   

出力: 
 

abcd abc false abcd abcd true 


説明 : Javaでは、文字列は不変であり、文字列バッファは変更可能です。 
したがって、文字列 s2 と s1 は両方とも同じ文字列 abc を指します。変更を加えた後、文字列 s1 は abcd を指し、s2 は abc を指すため、false になります。文字列バッファー内では、sb1 と sb2 は両方とも同じオブジェクトを指します。文字列バッファは可変であるため、1 つの文字列を変更すると、他の文字列も変更されます。したがって、オブジェクト (ここでは sb2) に変更を加えた後も、両方の文字列は依然として同じオブジェクトを指しています。
プログラム 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   

出力:  
 

Compile Error at line 8 


説明:  
1. 12 行目 println の '' により、数値が文字列として自動的にキャストされます。したがって、加算は行わず、文字列として追加されます。 
2. Line11 では、+= が short への自動キャストを行います。ただし、数値 123456 を short に含めることはできないため、負の値 (-7616) になります。 
(注 - 短い 2 バイト -32768 ~ 32767) ここで、数値 123456 は int の値を意味するものではありません。 zit は int 値の長さを示します。 
3. 他の 2 つは、8 行目のためコードがコンパイルされないため、危険です。 
ゼロで始まる数値は 8 進数 (0 ~ 7) として扱われます。
 

クイズの作成