【发布时间】:2013-08-02 19:57:35
【问题描述】:
以下代码产生此输出:
aaab -> aabb -> abbb -> bbbb
我的目标是让它看起来像这样:
aaab -> aaba -> abaa -> baaa
但是我很难弄清楚为什么我会得到这个结果。
String abcd = 'abcd';
int l=3;
byte[] word=new byte[]{abcd[0],abcd[0],abcd[0],abcd[0]};
System.out.println(new String(word)); // print: aaaa
while (l >= 0) {
byte[] present=word; // !!!
present[l + 1 - (l - (--l))] = abcd[1];
System.out.println(new String(present)); // print: aaab -> aabb -> abbb -> bbbb
}
System.out.println(new String(word)); // print: bbbb
如果我更改此行(5):byte[] present=word;
致byte[] present=new byte[]{abcd[0],abcd[0],abcd[0],abcd[0]};
然后我得到所需的输出。为什么会这样?
【问题讨论】:
-
byte[] present=word;这不会复制数组 - 这会导致present引用与word相同的数组。 -
我不写:word=present,我写:present=word。那么现在必须改变,而不是文字。
-
@satiate 除了
word和present将引用同一个数组。更改word[0]也将反映在present[0]上。