解答
A
解説
3行目では、char型で宣言された変数num1に「a」の値が格納されており、int型で宣言された変数num2には「10」の値が格納されています。char型は、Unicodeで表現できる1文字を表す際に使用されますが、数値として解釈すると符号なし整数(0〜65535)を表します。
3. char num1 = 'a'; int num2 = 10; |
4行目では、print()メソッドを呼び出しています。print()メソッドはオーバーロードされていますが、char型の引数を取るメソッドがないため、暗黙変換が適用され7行目のint型の引数を取るprint()メソッドが呼び出されます。
4. print(num1); : 7. public static void print(int c) { 8. System.out.println("int : " + c); 9. } |
5行目もprint()メソッドを呼び出していますが、引数はint型であるため、7行目のprint()メソッドが呼び出されます。
5. print(num2); |
実行結果は、それぞれ「97」と「10」と出力します。「char num1 = 'a'」に対する出力結果が「97」となります。これはint型への暗黙の型変換が行われたことにより、アスキーコードで「a」に割り当てられた「97」が表示されるためです。
int : 97 int : 10 |
【問題】 次のプログラムをコンパイルし、実行するとどうなりますか? 1つ選択してください。 1. public class Test{ 2. public static void main(String[] args) { 3. char num1 = 'a'; int num2 = 10; 4. print(num1); 5. print(num2); 6. } 7. public static void print(int c) { 8. System.out.println("int : " + c); 9. } 10. public static void print(double d) { 11. System.out.println("double : " + d); 12. } 13. } A. int : 97 int : 10 B. int : 97 double : 10.0 C. double : 97.0 double : 10.0 D. コンパイルエラー E. 実行時エラー |
暗黙変換やキャストによる明示的な変換は、配列に対しても使用可能です。ただし、基本データ型の配列であっても、配列自体は参照型として扱われるため、参照型の型変換のルールが適用されます。
図4では、int型の配列をjava.lang.Object型の変数へ代入可能です。しかし、double型の配列で宣言された変数には格納することができず、コンパイルエラーとなります。このように、配列に格納している値が基本データ型であっても、配列自体は参照型になるため、配列の型変換は参照型のルールが適用されます。(※参照型の型変換については次回解説します)。
class Sample2 { public static void main(String[] args) { Object obj = new int[] {10, 20, 30}; print(obj); // *** 以下はコンパイルエラー ** // double[] obj = new int[] {10, 20, 30}; } public static void print(Object obj) { int[] array = (int[])obj; for(int num : array) { System.out.println(num); } } /*** 以下はコンパイルエラー ** public static void print(double[] obj) { int[] array = (int[])obj; for(int num : array) { System.out.println(num); } } **/ } |
サンプルコード2 |
C:\sample>java Sample2 10 20 30 C:\sample> |
サンプルコード2の実行結果 |
山本道子
有限会社Ray代表。千葉県出身。一般事務、派遣を経て2000年サン・マイクロシステムズ入社。J2SEのほか、J2EEなどサーバサイドJavaコース担当およびテキスト開発に携わる。2004年退職後、有限会社Rayを設立し、システム開発、インストラクタ、執筆などを手掛けている。
Copyright © ITmedia, Inc. All Rights Reserved.