我想将一个字符串数组作为参数传递给类的复制构造函数。我想知道在面向对象的Java编程设置中哪些方法是正确/通常的方式:
- 在复制构造函数中复制数组 - 在上面复制的对象的“getArray”方法中复制数组
我的目标是按值复制数组,而不是通过引用来保持封装。
String[] apps;
// First version
public Smartphone(Smartphone p)
{
this.apps = Arrays.copyOf(p.getApps(), p.getApps().length);
}
public String[] getApps()
{
return apps;
}
// Second version
public Smartphone(Smartphone p)
{
this.apps = p.getApps();
}
public String[] getApps()
{
return Arrays.copyOf(apps, apps.length);
}
// Third version
public Smartphone(Smartphone p)
{
this.apps = Arrays.copyOf(p.getApps(), p.getApps().length);
}
public String[] getApps()
{
return Arrays.copyOf(apps, apps.length);
}
第二个版本是正确的。构造函数调用p.getApps()
,它返回一个复制的数组。
第三个版本将复制数组两次。那是不必要的。
对象在java中通过引用传递,例如String,Integer,Float等。只有原始类型按值传递,例如int,long,float,double,char等。
你可以做你正在做或正在做的事情;
System.arraycopy(Object src,int srcPos,Object dest,int destPos,int length)更多信息:https://docs.oracle.com/javase/7/docs/api/java/lang/System.html