关于数组的误解

来源:互联网 发布:js获取节点的方法 编辑:程序博客网 时间:2024/05/18 20:07

如下所示:

Int[]  a={1,2,3};

Int[]  c;

 

如果想要将a数组的值赋给c数组,那么用下面的方法是不正确的

 

c=a;//这样做的结果是将a数组的地址赋值给了c,而不是将数据赋值给c。

 

按照上面的赋值方式,当改变c的任何一个值,都会引起a数组的变化

比如:

c[0]=9;

System.out.println(a[0]);

 

运行的结果如下:

9

 

这并不是我们想要的

数组之间的赋值要用要数组拷贝,常用的如下:

c=a.clone();

这样的话在内存空间会有两个数组空间,而不是一个了。


下面是网上参考资料:

http://blog.163.com/huang_jianhao/blog/static/182480103201201692454830/

在JAVA里面,可以用复制语句”A=B”给基本类型的数据传递值,但是如果A,B是两个同类型的数组,复制就相当于将一个数组变量的引用传递给另一个数组;如果一个数组发生改变,那么引用同一数组的变量也要发生改变.
以下是归纳的JAVA中复制数组的方法:
1.使用FOR循环,将数组的每个元素复制或者复制指定元素,不过效率差一点
2.使用clone方法,得到数组的值,而不是引用,不能复制指定元素,灵活性差一点
3.使用System.arraycopy(src, srcPos, dest, destPos, length)方法,推荐使用
举例:
1.使用FOR循环
int[] src={1,3,5,6,7,8};
int[] dest = new int[6];
for(int i=0;i<6;i++) dest[i] = src[i];
2.使用clone
int[] src={1,3,5,6,7,8};
int[] dest;
dest=(int[]) src.clone();//使用clone创建
副本,注意clone要使用强制转换
3.使用System.arraycopy
int[] src={1,3,5,6,7,8};
int[] dest = new int[6];
System.arraycopy(src, 0, dest, 0, 6);
——————————————————————-
System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制.
其函数原型是:
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

src:源数组; srcPos:源数组要复制的起始位置;
dest:目的数组; destPos:目的数组放置的起始位置;
length:复制的长度.

注意:src and dest都必须是同类型或者可以进行转换类型的数组.
有趣的是这个函数可以实现自己到自己复制,
比如:int[] fun ={0,1,2,3,4,5,6};
System.arraycopy(fun,0,fun,3,3);

则结果为:{0,1,2,0,1,2,6};




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果换id通讯录没有了怎么办 华为p7 更新重启怎么办 打电话的图标没了怎么办 苹果手机wifi信号弱怎么办 没电脑想装wifi怎么办 阿巴町手表二维码丢了怎么办 儿童手表二维码丢了怎么办 电话手表二维码丢了怎么办 360儿童手表二维码丢了怎么办 喜书郎电话手表二维码丢了怎么办 微信充话费充错号码怎么办 话费冲到了副卡怎么办 冲话费冲错了怎么办 微信支付未到账怎么办 速卖通修补配件到国外怎么办 速卖通流量低怎么办 速卖通被判定重复铺货怎么办 拼多多商品降权怎么办 运满满有了差评怎么办 房贷款还清后该怎么办 身份证被偷了怎么办啊 苹果手机wifi速度慢怎么办 电脑桌面上的图标不见了怎么办 夏天手机没地方放怎么办 上班手机没地方放怎么办 京东退款未到账怎么办 京东退款失败后怎么办 在京东申请退款怎么办 微信退款没收到钱怎么办 在拼多多不发货怎么办 扫二维码群发微信骗局怎么办 电脑高清晰音频管理器打不开怎么办 吃鸡耳机有杂音怎么办 分期付款车被朋友卖了怎么办 网上购物付款显示繁忙怎么办 同行招牌高于我的招牌怎么办 拼多多刷手退款怎么办 网银卡在手机上卸载了怎么办 企业网银密码忘了怎么办 网银钱转错了怎么办 民生百货购物卡过期了怎么办