猿问

一个java问题,求解惑

Server端:

public class Arraytest
{
public static void main( String[] args)
{
String[] str1 = new String[3];
str1[0] = new String("tian");
str1[1] = new String("kong");
str1[2] = new String("nan");

            String[] str2 = new String[3];
            System.arraycopy( str1, 0, str2, 0, str1.length);                

            str2[2] = "fengyun";  //这一行
            System.out.println(str1[2]);
            System.out.println(str2[2]); 
    }

}

刚学java, 学到了数组
这个程序我是这样理解的, 见图

那么我觉得复制了之后str1[2]和str2[2]应该指向同一个位子nan那里呀,
为什么改变了 str2[2]的值,str1[1]的值没有变呢 ,求帮忙解解惑,

长风秋雁
浏览 455回答 3
3回答

慕婉清6462132

arraycopy是对数组进行浅拷贝,因此str2拷过去的是str1里面的引用,但是当给str2[2]赋值时,那时候str2[2]里面的引用改变了,然而str1[2]的引用依然是之前copy过去的引用。

Qyouu

arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。你的代码System.arraycopy( str1, 0, str2, 0, str1.length);是把str1[] 从0开始复制到str2[]0结束str2[2]的值改变了是因为:str2[2] = "fengyun";str1[1]没有任何操作,是不会变的

蓝山帝景

复制了之后,str1[2]和str2[2]指向同一个引用不是指向同个引用,是两个引用指向同个String。str2[2] = "fengyun";这句,只是把str2中引用指向了新的String。所以str1的没有变化。
随时随地看视频慕课网APP

相关分类

Java
我要回答