前提・実現したいこと
Java silver SE8の拡張for文に関する問題で分からない所があったので質問させていただきます。
次のプログラムの4行目for( )の空欄に記述するコードを選択肢から選ぶ問題です。
public class Main { public static void main (String[] args) { String[][] array = { {"A","B","C"} }; for( ) { System.out.print(obj); } } }
私が迷った選択肢は
A.Object obj : array
B.String str : array
この二択です。
私は "5行目 System.out.print(obj); で 変数objを呼び出しているから" 選択肢Aだと考えました。
正解はAなのですが、解説には
『選択肢Bは、2次元配列の集合から取り出した2次元目の配列を受け取る必要があるにもかかわらず、String型で変数を宣言している。配列とStringには互換性がないため、コンパイルエラーが発生する。』
とあり、この解説が理解できません
(´;ω;`)配列を呼び出す拡張for文でString型の変数は使ってはいけないという意味だろうか...
などと考えていたのですが次のコードからそうではないことは分かりました。
下のコードは先のコードを2次元配列から1次元配列に変え、変数をstrにしたものです。これをコンパイル、実行するとコンパイルエラーは起きず、「ABC」と表示されます。
public class Main { public static void main(String[] args) { String[] array = {"A","B","C"}; for (String str : array) { System.out.print(str); } } }
この二つのコードの違いと合わせて、上の解説の意味を教えていただきたいです。
よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー