为啥我写的arraycopy 不像是例子中那样 copy的引用。。。。但他们又是相等的。。。
网页地址:http://blog.csdn.net/angjunqiang/article/details/42031351
用它分别 copy二维数组 和 copy一维数组
为啥二维数组copy的时候像是把它源数组的地址给目的数组了
一维数组copy的时候 和 源数组 没关系一样
System.arraycopy()是复制运行栈中的内容,
你自已写的数组里面是User对象, 所以复制是reference, 他们都指向运行堆中的相同地址,这个地址存着对象的内容.
不知道是否解析清楚, 详解可以阅读JVM内存模型资料.
1对于两个数组来说 是深拷贝 , 你的例子是 用int 所以也是深拷贝(基础类型赋值) 然后你用== 判断 是错的 因为这里 是值判断 不是引用判断 ,其实内存地址是不一样的
2 官网例子 里面是对象 还有你后面 的数组 赋值 (引用赋值) 浅拷贝 所以 改变了 注 基础类型 == 为 值判断
在做这个实验的时候,你是用的是基本类型,进行比较或者赋值操作的时候会进行自动装箱操作,也就是说
其实你使用的Integer类型,这是一个final类型,这种类型是不能改变的,所以其实你在对a_bak[0]进行赋值的时候,改变的是引用,而非
值,当然得不到结果,而你所看到的那个例子它的赋值操作改变的是属性,所以是那个结果,问题的本质就是
你的赋值操作不是你想象的那样改变了值,而是改变了引用。
System提供的复制是基于本地方法栈的操作,是对源数组和目标数组的元素进行复制,并不会改变两个数组的内存地址,就是说这两个数组的地址引用不会变,
变得是数组里面的元素