java - 数组的浅拷贝,但不是引用的副本

标签 java

我偶然发现了一个问题,我必须创建一个方法,该方法不需要输入并返回此购物篮的 MarketProduct 数组的浅拷贝(不是引用的副本)。

我知道解决方案如下

public class Basket {
    private MarketProduct[] marketproducts;

    public Basket() {
        this.marketproducts = new MarketProduct[0];
    }

    public MarketProduct[] getProducts() {
        return this.marketproducts.clone();

我不明白的是 1.如果它是浅拷贝,那么它就是引用的副本,对吗? 2.我可以对java中的任何对象使用clone方法吗?它复制引用还是实际对象?如果是这样,那么以下可以简化(我可以使用克隆而不是使用 for 循环?)?

public void add(MarketProduct input) {
        MarketProduct[] list = new MarketProduct[marketproducts.length];
        for(int i = 0; i < marketproducts.length; i++) {
            list[i] = marketproducts[i];
        }
        list[list.length-1] = input;
        this.marketproducts = list;
    }

最佳答案

  1. if it's shallow copy then it's a copy of the reference right?

没有。它是一个新数组,包含对与原始数组相同的对象的引用

  1. can I use clone method to any object in java?

没有。阅读 Object.clone()Cloneable 的 javadoc 了解规则。

if so then the following can be simplified right(instead of using for loop i can use clone?)?

不,因为clone()会给你一个相同长度的新数组,因此你将无法在数组末尾添加新元素。

关于java - 数组的浅拷贝,但不是引用的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56915993/

相关文章:

java - 如果我在内部类中明确引用 'this' 会怎样?

java - 如何使用VFSJFileChooser访问远程计算机目录

java - 你如何在 Java 中创建(和读取)Windows 快捷方式(.lnk 文件)?

java - 如何确定 32BIT Java 的位置

java - 流上的终端操作是否关闭源?

java - 如何从HashMap中获取玩家列表

java - NIO2 AsynchronousSocketChannel 完全使用 CompletionHandler 进行读/写

java - Glassfish 4 返回 400 错误的 GET 请求和负载

java - Swing 中的自定义绘图循环

java - 结果集相对跳过 Java/Access 中的最后一条记录