1

那么是否可以从不同的数组中引用另一个数组元素?

像这样

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

array1[0] = "David";

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

当我尝试打印数组时,它只打印 HelloWorld 而不是 HelloDavid

这可能吗?如果没有,这可能使用变量吗?

4

2 回答 2

7

你所拥有的是有效的,但输出将是HelloWorld,而不是HelloDavid

虽然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]};

在上面的代码中,您正在创建一个名为的数组array2,其0th索引包含String literal"Hello" 的引用,并且1st索引包含存在于array1[0] 中的Stringliteral("World") 的引用。StringPool根据由编译器更改如下:JLS3.10.5-1 array2[1]

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

现在排队:

array1[0] = "David";

array[0]要包含新创建的字符串“David”的引用StringPool。但它不会改变索引1处存在的元素array2。因为array2[1]已经指的是StringPool.
如果您在代码中进行以下更改,您将获得“HelloDavid”输出:

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