System,arraycopy 和普通数组赋值语句区别?

Loghnzagn 2013-06-19 10:18:25
以下是我模拟俄罗斯方块销行方法的代码

方法描述:某行满了以后,将上一行赋值给下一行,顶行清空为0

public class Systemarraycopy {
public static void main(String args[]){
int[][] wall ={{0,2,1},{1,2,1},{2,2,1},{3,2,1},{4,2,1}};
for(int i = 0;i<5;i++){
int[] line = wall[i];
System.out.println(Arrays.toString(line));
}
System.out.println();
for(int i = 3;i>=1;i--){
System.arraycopy(wall[i-1], 0, wall[i], 0, 3);
//wall[i]=wall[i-1];(如果使用注释掉的这句就会出现问题)
if(i==1)Arrays.fill(wall[0], 0);
}
for(int i = 0;i<5;i++){
int[] line = wall[i];
System.out.println(Arrays.toString(line));
}

}
}

使用System.arraycopy结果

使用wall[i]=wall[i-1]结果


上面使用arraycopy的是理想结果

但是如果把if(i==1)Arrays.fill(wall[0],0);去掉
两种方法结果一样!

为什么会出现这种情况?请高人指点啊
...全文
276 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
地下室森林 2013-06-20
  • 打赏
  • 举报
回复
关于arraycopy可以看老紫竹的博客: http://blog.csdn.net/java2000_net/article/details/4059465 在JAVA里面,可以用复制语句"A=B"给基本类型的数据传递值,但是如果A,B是两个同类型的数组,复制就相当于将一个数组变量的引用传递给另一个数组;如果一个数组发生改变,那么引用同一数组的变量也要发生改变. 另外使用复制的话除了for循环和arraycopy,还可以用clone方法
Loghnzagn 2013-06-20
  • 打赏
  • 举报
回复
明白了,我这样引用的是同一组数据
oh_Maxy 2013-06-20
  • 打赏
  • 举报
回复
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。 src - 源数组。 srcPos - 源数组中的起始位置。 dest - 目标数组。 destPos - 目标数据中的起始位置。 length - 要复制的数组元素的数量。 以上来自API LZ的wall是二维数组,则wall[x]就是一个数组,后面的逻辑,相信LZ自己应该能分析出来了吧? 个人感觉,在解读一个程序碰到一个JDK封装的方法时,我们只要知道其作用即可,如果一定要知道其原理,最好也是最权威的还是要看看其源码(安装JDK都会有个src.zip的源码包的),而且这个原理的学习,应当算是另外一个“课题”(不要影响自己对当前程序的分析或理解)。
q35335010 2013-06-19
  • 打赏
  • 举报
回复

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧