Ril*_*eyE 2 java getter pointers reference
我不完全理解Java何时传递副本/值以及何时传递"引用"(指针).
我正在尝试分配我拥有的静态对象的副本,但我不确定如何去做.
我有这个:
static ArrayList<MyObject> myObjects;
Run Code Online (Sandbox Code Playgroud)
我想获得myObjects的副本,以便我可以在不影响原始值的情况下使用值.当我使用这样的getter时它是否传递引用或副本/值:
public static ArrayList<MyObject> getMyObject()
{
return ThisClass.myObjects;
}
Run Code Online (Sandbox Code Playgroud)
那回报是什么?如果是参考,我怎样才能获得副本?
我见过这些:
但我仍然不太明白我会得到什么.
Java将永远只要返回一个参考,而不是副本,因为它不是一个基本类型(又名long,int,short,等,或原始包装中的一个Long,Integer,Short.
要获取副本,您需要复制数据,使用复制构造函数,或使用clone将创建具有适当值的新对象的方法.
带有列表的复制构造函数的示例,默认情况下,这是一个"浅复制",意味着里面的对象是相同的.
List<MyObject> myNewCopiedList = new ArrayList<MyObject>(oldList);
Run Code Online (Sandbox Code Playgroud)
对于"深层复制",意味着内部对象可以在不影响原件的情况下进行变异,您需要创建一个新的List然后添加对象的副本/克隆并添加.
例如,假设MyObject具有复制构造函数或clone方法.
List<MyObject> myNewCopiedList = new ArrayList<MyObject>();
for (MyObject myo : oldList){
myNewCopiedList.add(new MyObject(myo)); // if there is a copy constructor
myNewCopiedList.add(myo.clone()); // if there is clone method
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |