为了账号安全,请及时绑定邮箱和手机立即绑定

一个java问题,求解惑

一个java问题,求解惑

长风秋雁 2019-03-29 18:19:18
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]的值没有变呢 ,求帮忙解解惑,
查看完整描述

3 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

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

查看完整回答
反对 回复 2019-04-28
?
Qyouu

TA贡献1786条经验 获得超11个赞

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]没有任何操作,是不会变的


查看完整回答
反对 回复 2019-04-28
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

复制了之后,str1[2]和str2[2]指向同一个引用

不是指向同个引用,是两个引用指向同个String。

str2[2] = "fengyun";

这句,只是把str2中引用指向了新的String。所以str1的没有变化。


查看完整回答
反对 回复 2019-04-28
  • 3 回答
  • 0 关注
  • 454 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号