以下の Java プログラムの出力を予測します。
プログラム 1:
// 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:
// 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:
// 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) として扱われます。
文字列を文字に変換する方法