我有这个变量:
private String[] secretWordDictionary = { "bulbasaur", "ivysaur", "venusaur"};
并且正在调用此方法:
public void generateSecretWord() {
char[] secretWord = secretWordDictionary[(int) (Math.random() * 25)].toCharArray();
disguisedWord = secretWord;
secretWord[2] = '?';
System.out.println(secretWord);
System.out.println(disguisedWord);
}
现在,当我运行代码时,我得到以下输出:
bu?basaur
bu?basaur
所以我确定从字符到字符串的转换以及数字生成器确实有效。在该方法中,我制作了另一个 char[] disguiseWord 并将 SecretWord 的字符分配给它。然后,我将 SecretWord 的第三个索引字符替换为“?”。那么为什么输出包含“?”对于secretWord 和disguiseWord 来说?我只更改了 SecretWord 的第三个索引字符而不是 disguiseWord 对吗?
最佳答案
Arrays in Java are objects.因此,disguishedWord = SecretWord;
不会将 secretWord
复制到 disguishedWord
,而只是复制对同一对象的引用.
由于 disguishedWord
和 secretWord
指向同一对象,因此对 secretWord
的每次更改也适用于 disguishedWord
。
为了解决这个问题,clone the array :
disguisedWord = secretWord.clone();
secretWord[2] = '?';
这将产生预期的结果:
bu?basaur
bulbasaur
关于java - 将图表[]从一个变量复制到另一个变量,然后更改单个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35144686/