【问题标题】:int[] copy = data; // What happens when data is an array?int[] 复制 = 数据; // 当数据是一个数组时会发生什么?
【发布时间】:2015-04-06 19:58:38
【问题描述】:

有人会用内存图解释你放置时会发生什么

    int[] data  = {1, 3, 5, 7, 9};
    int[] copy = data;

在你的程序中?

它只是简单地创建一个长度与之前相同的数组吗?我知道它们不会有相同的值,但仅此而已。

会在第一个索引中复制接收数据的地址吗?

【问题讨论】:

  • 我不明白为什么我得到了反对票,这是一个严肃的问题......

标签: java arrays declaration


【解决方案1】:

这根本不是复制。

您的两个变量 datacopy 将指向同一个数组。

如果你想要一个副本,你可以做

int[] copy = Arrays.copyOf(data, data.length);

【讨论】:

    【解决方案2】:

    不会发生数据复制,您只是将对数组的引用分配给新变量。

    ----------
    | int[5] | <--- data
    |   1    |      points at the memory address of your array object
    |   3    |
    |   5    |
    |   7    |
    |   9    |
    ----------
    

    当你说:

     int[] copy = data
    

    发生了什么是这样的:

             ----------
    copy --> | int[5] | <--- data 
             |   1    |      points at the memory address of your array object 
             |   3    |      "copy" also points at the same memory location
             |   5    |
             |   7    |
             |   9    |
             ----------
    

    【讨论】:

    • 谢谢瑞恩!这正是我所需要的。我知道它不会制作新副本,但我只是不明白到底发生了什么。
    【解决方案3】:

    尝试输出此代码。

    System.out.println(data instanceof Object);
    

    你会看到输出:

    true
    

    这是因为int[]Object 的子类。简单地说,copy 现在指向 data 指向的同一个数组。

    【讨论】:

    • 这很有趣也很有帮助!谢谢你。你还能应用什么?
    猜你喜欢
    • 2017-01-01
    • 2023-04-02
    • 1970-01-01
    • 2017-07-21
    • 2012-07-30
    • 2019-12-21
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多