Java プログラムの出力 |セット5
以下の 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:
// 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) として扱われます。