首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数组复制混淆

数组复制混淆
EN

Stack Overflow用户
提问于 2020-03-29 23:28:36
回答 2查看 59关注 0票数 1
代码语言:javascript
运行
复制
int[] arr = {1, 2, 3, 4, 5};
int[] copy = arr;
copy[4] = 2;
System.out.println(arr[4]);

所以它打印出2,但我不知道为什么当arr不等于拷贝时,它会这样做。不是应该是5岁还是我傻吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-29 23:32:40

,所以它打印出2,但我不知道为什么它会这样做,而arr并不等于复制。不是应该是5点吗?

不,这是预期的行为。这是因为copyarr引用的是同一个数组对象。

以不可变的方式创建副本,如下所示:

代码语言:javascript
运行
复制
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] arr = { 1, 2, 3, 4, 5 };
        int[] copy = Arrays.copyOf(arr, arr.length);
        copy[4] = 2;
        System.out.println(arr[4]);
        System.out.println(copy[4]);

        int[] anotherCopy = arr.clone();
        anotherCopy[4] = 2;
        System.out.println(arr[4]);
        System.out.println(anotherCopy[4]);
    }
}

输出:

代码语言:javascript
运行
复制
5
2
5
2
票数 3
EN

Stack Overflow用户

发布于 2020-03-29 23:33:57

编译器不是单独创建一个数组,而是为原始数组分配一个指针。换句话说,这两个数组实际上都是相同的数据,但名称和指针不同。改变一种会影响另一种。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60922048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档