我有一个称为“ playingField”的2D数组。在进行任何更改之前,我制作一个tempField 2D数组并设置tempField = playingField。
经过几次修改,所有修改都起作用了,我在代码中看到了这一点:
else {
//at this point both playingField and tempField are unchanged still
boundsNormal = bounds.OutOfBounds(move.MovePlayer(playingField,trekker, direction, rowT, colT));
if(boundsNormal == true){
//for some reason, at this point, tempField gets reassigned to the new playingField (which I'm still not sure why *THAT* changes)
playingField = tempField;
MovePlayer是一种方法,用于修改其需要的2D数组(在本例中为playingField),并且OutOfBounds在给定数组的情况下返回true或false。
我也许能理解为什么playingField会被更改,但不知道为什么在初始化boundsNormal变量后tempField应该经历任何更改。
最佳答案
我制作了一个tempField 2D数组并设置了tempField = playingField。
你说的话没有道理。您正在创建一个名为tempField
的数组变量,但如果这样做
tempField = playingField
那么两个变量现在都指向同一个数组。因此它们都被更改了,因为它们是同一数组。
为避免这种情况,通常可以使用
System.arrayCopy
代替=
。但是,对于二维数组,“深度复制”要复杂一些,因为您有一个数组数组。(注意:更一般而言,当对象是可变的时,可能需要对它们进行“深度复制”或“深度克隆”,而不是使用
=
来避免此问题。数组只是该一般规则的一个示例。)