我试图克隆一个数组列表,这样就会创建两个列表。在那之后,我尝试修改其中一个列表中元素的属性。当我比较列表时,它应该给我错误的相同结果,但它是真的。我认为这与元素或列表的指针有关。有什么解决方案可以解决这个问题吗?
我的代码是这样的:
    List<UnifiedBucket> ubsCopy = new ArrayList<>(ubs);
    ubsCopy.get(14).setRawPolicy(null);
    UnifiedBucket ub1 = ubs.get(14);
    UnifiedBucket ub2= ubsCopy.get(14);
    System.out.println(ub1 == ub2);
    System.out.println(ub1.getRawPolicy().equals(ub2.getRawPolicy()));发布于 2019-09-27 23:40:47
你想要的是一个深拷贝,但是构造函数做了浅拷贝,看看public ArrayList(Collection c)
如果你想做一个深度拷贝,在ArrayList上使用迭代器,就像这样:
    List<UnifiedBucket> UnifiedBucketClone = new ArrayList<>();
    Iterator<UnifiedBucket> iterator = ubs.iterator();
    while(iterator.hasNext()){
        UnifiedBucketClone .add((UnifiedBucket) iterator.next().clone());
    }https://stackoverflow.com/questions/58136645
复制相似问题