关于数组的误解
来源:互联网 发布: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};
- 关于数组的误解
- 关于inline的误解
- 关于Table的误解
- C++数组初始化的误解
- 关于memset的一点误解
- 关于list.size()的误解
- 关于 Nginx 的几个误解
- 关于TransmitFile的函数误解
- 关于C++的一些误解
- 关于JAVA的常见误解
- 关于json的一些误解
- 关于Apache 的timeout 误解
- 关于测试的一些"误解"
- 关于HTTPS的七个误解
- 关于颈椎病的一些误解
- 关于Java的常见误解
- 关于HTTPS的七个误解
- 关于default constructor的误解
- Mac上的抓包工具Charles
- linux安装redis和redis的php扩展
- 明明的随机数
- WCF系列博文(二)-----WCF组成与核心
- Android 4.4 新特性
- 关于数组的误解
- Fix the issues identified by lint, or add the following to your build script...
- iOS推送过程详解
- HDU 4730 We Love MOE Girls
- OpenCV学习之路
- STL之set详解
- msl、ttl及rtt的区别—— TCP控制字段标志
- UVA 10608Friends【并查集】
- VS2010发布网站失败解决办法