1

別の配列内から別の配列要素を参照することは可能ですか?

このような

String[] array1 = new String[] {"World"};
String[] array2 = new String[] {"Hello", array1[0]};

array1[0] = "David";

for(String element : array2)
   System.out.print(element);

配列を印刷しようとすると、HelloDavid ではなく HelloWorld が印刷されます。

これは可能ですか?そうでない場合、これは変数を使用して可能ですか?

4

2 に答える 2

7

あなたが持っているものは有効ですが、出力HelloWorldHelloDavid

array1[0]新しい値を持ちますが、array1配列参照ではなく文字列値参照を格納するため影響を受けません。したがって、配列参照が更新されても、配列で参照される文字列は変更されません。

編集

あなたの質問に続いて、あなたが探しているのはポインタ機能です(C++によって提供されます)。次の多次元ソリューションはまったく同じではなく、かなり不格好ですが、必要なことができます。

    String[] array1 = new String[]{"World"};
    String[][] array2 = new String[][]{new String[] {"Hello" }, array1};

    array1[0] = "David";

    for (String[] element : array2)
        System.out.print(element[0]);

    ==> output: HelloDavid
于 2013-03-26T16:57:37.903 に答える
0
String[] array2 = new String[] {"Hello", array1[0]};

上記のコードでは、インデックスが "Hello" の参照を含み、インデックスが、array1[0] も参照しているliteral("World") の参照を含む という配列をarray2作成0thString literal1stいますStringStringPoolによると、コンパイラによって次のように変更されます。JLS3.10.5-1 array2[1]

String[] array2 = new String[] {"Hello", "World"};

今並んでいます:

array1[0] = "David";

array[0]で新しく作成した文字列「David」の参照を含むようにしますStringPool。しかし、インデックス1の要素は変更されませんarray2array2[1]は既に に存在する文字列リテラル "World" を参照しているためStringPool
コードに次の変更を加えると、「HelloDavid」出力が得られます。

array1[0] = "David";
array2[1] = array1[0];
于 2013-03-26T17:07:38.933 に答える