解答
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.