logo

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) として扱われます。
 

文字列を文字に変換する方法