c4951491235
2018-02-09 07:00
采纳率: 75%
浏览 1.3k
已采纳

新手学习JAVA,关于System.arraycopy的一个问题

为啥我写的arraycopy 不像是例子中那样 copy的引用。。。。但他们又是相等的。。。

自己理解所写的代码

来源于CSDN一位博主网页中的代码
网页地址:http://blog.csdn.net/angjunqiang/article/details/42031351

用它分别 copy二维数组 和 copy一维数组

为啥二维数组copy的时候像是把它源数组的地址给目的数组了

一维数组copy的时候 和 源数组 没关系一样

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • 戢子 2018-02-09 07:32
    已采纳

    System.arraycopy()是复制运行栈中的内容,

    • 对于基本类型, 内容就是value.
    • 对于引用类型, 内容就是reference.

    你自已写的数组里面是User对象, 所以复制是reference, 他们都指向运行堆中的相同地址,这个地址存着对象的内容.

    不知道是否解析清楚, 详解可以阅读JVM内存模型资料.

    已采纳该答案
    打赏 评论
  • 根由心生 2018-02-09 07:35

    1对于两个数组来说 是深拷贝 , 你的例子是 用int 所以也是深拷贝(基础类型赋值) 然后你用== 判断 是错的 因为这里 是值判断 不是引用判断 ,其实内存地址是不一样的
    2 官网例子 里面是对象 还有你后面 的数组 赋值 (引用赋值) 浅拷贝 所以 改变了 注 基础类型 == 为 值判断

    打赏 评论
  • oppo-s 2018-02-09 07:36

    在做这个实验的时候,你是用的是基本类型,进行比较或者赋值操作的时候会进行自动装箱操作,也就是说
    其实你使用的Integer类型,这是一个final类型,这种类型是不能改变的,所以其实你在对a_bak[0]进行赋值的时候,改变的是引用,而非
    值,当然得不到结果,而你所看到的那个例子它的赋值操作改变的是属性,所以是那个结果,问题的本质就是
    你的赋值操作不是你想象的那样改变了值,而是改变了引用。

    打赏 评论
  • z2w1990 2018-02-13 09:33

    System提供的复制是基于本地方法栈的操作,是对源数组和目标数组的元素进行复制,并不会改变两个数组的内存地址,就是说这两个数组的地址引用不会变,
    变得是数组里面的元素

    打赏 评论

相关推荐 更多相似问题