11

コードに問題があることがわかりました。最初のコード:

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String[] blablubb = { "a", "b", "c" };

        for(String s : blablubb) {
            s = "over";
        }
        printArray(blablubb);


        for (int i = 0; i < blablubb.length; i++) {
            blablubb[i] = "over";
        }
        printArray(blablubb);

    }

    public static void printArray(String[] arr) {
        for( String s : arr ) {
            System.out.println(s);
        }
    }

}

出力は次のとおりです。

a
b
c
over
over
over

最初のループも配列内の文字列を上書きすると想定しました。したがって、出力はいずれにしても終了します。参照を作成する代わりに、値のコピーを作成しているようです。私はこれを認識したことがありません。私はそれを間違っていますか?代わりに参照を作成するオプションはありますか?

//編集: 私を除いて、誰もがそれについて知っているようです. 私は C のバックグラウンドから来ており、C とは非常に異なる参照という用語に十分な注意を払っていません。幸いなことに、これを理解するのに 10 分しかかかりませんでした (今回)。

4

6 に答える 6

5

ループfor(String s : blablubb)は次のコードと同等です。

for(int i = 0; i < blablubb.length; i++ ) {
    String s = blablubb[i];
    s = "over";
}

sうまくいけば、このことから、を変更せずにに別の値を再割り当てするだけであることがわかりますblablubb[i]。これにより、表示される出力が説明されます。

于 2013-07-31T11:53:00.267 に答える
0
 s = "over"; 

配列内の文字列ではなく、 s の参照を変更するだけです。

blablubb[i] = "over";

配列の i 番目の位置に格納されている値を変更します

于 2013-07-31T11:52:49.763 に答える
0
for(String s : StringArray)
{
}

のようなものです

for(int i = 0; i < StringArray.length; i++)
{
    String s = StringArray[i];
}
于 2013-07-31T11:53:07.617 に答える