我偶然发现了一个问题,我必须创建一个方法,该方法不需要输入并返回此购物篮的 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;
}
最佳答案
- if it's shallow copy then it's a copy of the reference right?
没有。它是一个新数组,包含对与原始数组相同的对象的引用
- 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/