java - 许多Java集合都实现了add方法——它们实际上是深复制

标签 java collections methods naming-conventions

我只是在掌握集合,发现 add() 方法实际上将对象深度复制到集合中。它们应该被称为“copyInto”之类的名称吗?

import java.util.*;
class Test {
    public static void main(String[] args) {

        Set <Frog> setOfFrogs = new HashSet <Frog>();

        Frog frog1 = new Frog("Kermit");
        Frog frog2 = new Frog("Bob");

        setOfFrogs.add(frog1);
        setOfFrogs.add(frog2);

        frog1.name = "May";
        frog2.name = "Mary";

        for (Frog eachFrog : setOfFrogs){
            System.out.println(eachFrog.name);
        }
    }
}

这会打印:“May”和“Mary”。

抱歉,这只是浅拷贝。我需要将这个“通过引用”的业务纳入我的头脑中......

最佳答案

.add(..) 只是添加对集合中对象的引用。它不进行深度复制。例如,如果您更改对象,则更改将反射(reflect)在集合中。

关于java - 许多Java集合都实现了add方法——它们实际上是深复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9167033/

相关文章:

java - ServletFileUpload#parseRequest(request) 返回一个空列表

collections - Cassandra 模式使用集合或多行

java - double 方法的 null 检测

java - 为什么变量显示0?

java - 改变家庭背景

java - 如何从 WebSocket 实现开始

java - 使用 lombok 访问字段的字段

java - 在 map 中设置多个值

arrays - 在 Laravel 中打印出集合的值

java - 使用递归从数组中获取具有最大值的对象