Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ArrayList源码分析中对toArray()的描述“调用者可以自由地修改返回的数组”不准确。Arrays.copyOf()在元素是引用类型时是浅拷贝,自由修改数组,也是修改了原数组中的元素 #2433

Open
90srlb opened this issue Jul 18, 2024 · 1 comment

Comments

@90srlb
Copy link

90srlb commented Jul 18, 2024

/** * 以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组。 * 返回的数组将是“安全的”,因为该列表不保留对它的引用。 (换句话说,这个方法必须分配一个新的数组)。 * 因此,调用者可以自由地修改返回的数组。 此方法充当基于阵列和基于集合的API之间的桥梁。 */ public Object[] toArray() { return Arrays.copyOf(elementData, size); }

@Snailclimb
Copy link
Owner

/** * 以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组。 * 返回的数组将是“安全的”,因为该列表不保留对它的引用。 (换句话说,这个方法必须分配一个新的数组)。 * 因此,调用者可以自由地修改返回的数组。 此方法充当基于阵列和基于集合的API之间的桥梁。 */ public Object[] toArray() { return Arrays.copyOf(elementData, size); }

这样修改会不会更好一些:

    /**
     * 以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组。
     * 返回的数组将是“安全的”,因为该列表不保留对它的引用。
     * (换句话说,这个方法必须分配一个新的数组)。
     * 因此,调用者可以自由地修改返回的数组结构。
     * 注意:如果元素是引用类型,修改元素的内容会影响到原列表中的对象。
     * 此方法充当基于数组和基于集合的API之间的桥梁。
     */
    public Object[] toArray() {
        return Arrays.copyOf(elementData, size);
    }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants