2

次のコードでは、String 名を初期化しないままにしておくとコンパイル エラーが発生しますが、char の初期化は初期化されていないままでも問題ありません。この行動の違いはなぜですか?

class Demo {
    public static void main(String[] args) {
        char initial;
        String name;
        for (String input: args) {
            name += input;
            initial = input.charAt(0);
            System.out.print(initial + " ");
        }
    }
4

4 に答える 4

10

(行で) 読み取る前に char を割り当ててSystem.out.println()いますが、読み取る前に文字列を割り当てていません。これはname += input行で発生します。

于 2012-10-22T05:57:17.963 に答える
3
name += input;

と同等です

name = name + input;

name(ローカル変数) を初期化せずに使用しています。これがエラーの原因です。name具体的には、初期化されていない と連結しようとしていinputます。

initial = input.charAt(0); 

ここでは、print ステートメントで使用する前に初期化しています。したがって、エラーはありません。

于 2012-10-22T05:57:49.710 に答える
2

初めて initial を使用すると、次の値に設定されます。

initial = input.charAt(0);

初めて使用される名前は、計算で null 値を使用しています。

name += input; // is equivalent to
name = null + input;

name は初期化されていないため (+= の意味を参照)。

于 2012-10-22T05:59:08.510 に答える
0

charはプリミティブであり、これらは自動的に初期化されます(charから\ u0000の場合)。nameを初期化していないので、name +=inputは意味がありません。名前を「」の値で始めることを意図している可能性があります。

于 2012-10-22T06:00:54.247 に答える