这个变量如何变化?

sat*_*ate 2 java arrays variables

以下代码生成此输出:

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
Run Code Online (Sandbox Code Playgroud)

如果我改变这一行(5): byte[] present=word;

byte[] present=new byte[]{abcd[0],abcd[0],abcd[0],abcd[0]};

然后我得到了所需的输出.为什么会这样?

Mic*_*lle 7

present被设置为一个参考word.word未复制值.因此,当您更改值时present,它实际上正在更改present"引用" 的变量:word.