java函数改变参数值_Java函数参数值正在改变

没有看到做了什么

CopyTilesArrays (tilesArray, tempTilesArrayToSend);我们不能说太多。

请注意,在Java中,没有按值传递或按引用传递,但是引用的副本将传递给方法。这个引用的副本 - 如果是对象和数组 - 指向相同的原始对象,所以如果更改底层/嵌入对象,原始对象会受到影响,但是如果更改引用,则原始对象不会影响。

如果要传递阵列的独立副本,则必须执行深度ocpy。也许就是说,CopyTilesArrays应该做什么,但是没有看到它,我们不知道。

还要注意,有或者更好:可以有多个对象层,有不同的理由留在表面,去核心,或留在两者之间。

例如,要从“数组阵列”中制作深层副本,您可以执行以下操作:

public class TilesCopy {

Tiles[][] copyTilesArrays (Tiles[][] from, int outer, int inner) {

Tiles[][] to = new Tiles[outer][inner];

int o = 0;

for (Tiles [] tiles: from) {

Tiles[] fresh = new Tiles [inner];

int i = 0;

for (Tiles t : tiles)

{

fresh[i] = t.deepCopy ();

i++;

}

to [o] = fresh;

o++;

}

return to;

}

}请注意,在最内层循环中,元素不仅仅使用fresh[i] = t;引用,而是使用深层副本,以保持原始Array中的对象不受影响。

您可以通过多种其他方式复制Tiles数组的数组。例如,您可以重新排列外部数组。如果瓷砖是

[[A][B][C]]

[[D][E][F]]

[[G][H][I]]你可以复制它们,并将目标修改为:

[[G][H][I]]

[[D][E][F]]

[[A][B][C]]只需复制外部数组,然后重新排列它们。你可以复制内部数组,为:

[[C][B][A]]

[[F][E][D]]

[[I][H][G]]如果您现在将A修改为a,原始A也会受到影响,没有深层复制:

[[C][B][a]]

[[F][E][D]]

[[I][H][G]]

[[a][B][C]]

[[D][E][F]]

[[G][H][I]]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值