2 qq 30951345 qq_30951345 于 2016.05.03 13:36 提问

数组复制问题--Interger类型数组 10C

public class IntegerArray{
public static void main(String[] args){
Integer[] scores1 = new Integer[]{1,2,3,4,5};
Integer[] scores2 = new Integer[scores1.length];
for(int i = 0; i < scores1.length; i++){
scores2[i] = scores1[i];
}
for(Integer score2: scores2){
System.out.print(score2);
}
System.out.println();
scores2[0] = 7;
for(Integer score1 : scores1){
System.out.print(score1);
}
System.out.println();
for(Integer score2: scores2){
System.out.print(score2);
}
}

}

结果:
12345
12345
72345

疑问:Integer类型的数组在此例中应该是浅复制啊?怎么结果是不符合浅复制,而是深复制

3个回答

CSDNXIAOD
CSDNXIAOD   2016.05.03 13:42

数组复制引用问题
java数组复制问题
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

w172087242
w172087242   Ds   Rxr 2016.05.03 13:52

Integer只是int类型的装箱,和其他引用类型不同。
你改了下标的数字,就改了,而不是改了引用的值。

而且以你的这种方式,就算是其他引用类型,值也会只改变数组2,
因为你的下标指向了一个新地址,代表指针与数组一的原指向地址已经不同了。

和深复制浅复制没关系,浅复制表现在,复制过程中如果有引用对象,那么,复制的是该引用的地址,而不是对象,所以当在复制后的对象上改变其
引用地址所指向的对象值的时候会影响复制前的值。

whoSaidNo
whoSaidNo   2016.05.03 13:56

你可以试一下scores2=scores1,应该就是你要的浅复制
你逐个赋的相同的值,当然会是一样的

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C++中有关数组的一些细节问题
今天读C++ primer发现其中讲数组的一章,有一些东西自己还不是很清楚,所以专门下一篇博客来总结一下数组里面的一些容易忘记的知识。 1. 首先看下面声明数组的几种方式有什么区别:int *ptr[10]; int &refs[10] = /* */; error int (*Parray)[10] = &array; int (&arrRef)[10] = arr;首先,第一个的意思是定义了
java数组复制的效率
AVA语言的下面几种数组复制方法中,哪个效率最高? 正确答案: B   你的答案: D (错误) for循环逐一复制 System.arraycopy System.copyof 使用clone方法  A、for循环的话,很灵活,但是代码不够简洁.     B、System.arraycopy()源码。可
【java】数组复制几种方式比较
import java.util.Arrays; /** * System.arraycopy方法的使用。 * 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束 */ public class LessionSystemArraycopy { public static void main(String[] args) { // 此方法为n
如何利用C语言实现数组复制的功能
把数组src[ ]中的数据复制到dest[ ]中 /* 数组复制作业 */ #include void cpy(int *p_src,int *p_dest,int size){ int num = 0; for(num = 0;num <= size - 1;num++){ p_dest[num] = p_src[num]; } } int main(){ int src[] =
数组复制的几种常用方法
1、System.arraycopy(src, 1, dest, 0, 6);     src为原数组,1为复制的起始位置,dest为目的数组,0为目的数组放置的起始位置,6为复制的长度 2、dest=(int[]) src.clone();//使用clone创建 dest为目的数组,src为原数组,clone复制实现数组全部复制 3、dest=Arrays.copyOf(src, 2);
arraystest.java
java.util数组操作代码,数组复制,数组排序,数组赋值,数组相等判断
c语言复制数组的函数
c语言中 数组不能直接用数组名相互赋值 如果需要从a数组中复制k个元素到b数组中 可以使用函数:memcpy(b,a,sizeof(int)*k);以上代码将a,b数组看作是int型 是其他类型做相应的改变就行了
integer转换为 long
<br />long productId_int = Integer.valueOf(productId).longValue() ;
1、用C语言实现字符数组1拷贝到字符数组2,替代strcpy函数
刚入IT行业,还有很多不懂,想深入学习C,一点一点的积累,这个要求曾经在笔试的时候碰到过。题目主要参考尹成老师博客里面的,拿过来用我自己的思维写一遍。 #include #include #define NUM   100 //给需要拷贝到的数组设定大小 void copy(char str1[], char str2[]) { int n = 0; while (str1[n]
数组复制,扩容的几个容易搞混的方法
几个数组方法搞的我头晕, 记不住,就直接写下来了。1、 先来一个底层方法:System.arraycory(源数组,源数组开始位置,目标数组,目标数组开始位置, 复制的长度)*这个方法,每次看着看着就有晕了过去,参数太多,类型又差不多,总是会看偏,理解错。 其实,System类的源码,解释的还是很清楚的*源码+注释: /** * @param src the so...