那么可以从不同的数组中引用另一个数组元素吗?
喜欢这个
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
这可能吗?如果没有,这是否可以使用变量?
答案 0 :(得分:7)
你拥有的是有效的,但输出将是HelloWorld
,而不是HelloDavid
虽然array1[0]
将有一个新值,但array1
将不受影响,因为它存储String值引用,而不是数组引用,因此当数组引用更新时,数组中引用的字符串是没有改变
修改强>
从您的问题开始,您正在寻找的是指针功能(由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
答案 1 :(得分:0)
String[] array2 = new String[] {"Hello", array1[0]};
在上面的代码中,您创建了一个名为array2
的数组,其0th
索引包含String literal
“Hello”的引用,1st
索引包含String
的引用{1}}中出现的{1}}文字(“世界”),其中array1 [0]也引用了它。根据{{3}} StringPool
编译器更改如下:
array2[1]
现在排队:
String[] array2 = new String[] {"Hello", "World"};
您使array1[0] = "David";
包含array[0]
中新创建的字符串“David”的引用。但它不会改变StringPool
的索引1
处的元素。由于array2
已经指代array2[1]
中出现的字符串文字“世界”
如果您在代码中进行以下更改,您将获得“HelloDavid”输出:
StringPool