java类实例更改另一个实例
代码是:
package classes;
public class Test {
private static double mutationRate = 0.5;
public static void main(String[] args) {
Population pop = new Population();
pop.initialise();
Population po = new Population();
po.getIndividusList().add(pop.getFittest());
po.getIndividusList().add(mutate(pop.getIndividusList().get(1)));
}
private static Chromosom mutate(Chromosom l) { // changer les couples d'interventions des parcs)
// loop through genes
Chromosom ch = new Chromosom();
for (int i = 0; i < l.size(); i++)
ch.put(i, l.get(i));
for (int i = 0; i < ch.size(); i++) {
double alea = Math.random() * 13;
int moisIntervention1 = (int) alea;
Intervention interv1 = new Intervention(1, moisIntervention1);
ch.get(i).modInterventions(ch.get(i).intervention2(interv1));
}
return ch;
}
}
问题是我没有更改实例pop,但是当我更改另一个实例po时,pop也会更改
# 1 楼答案
java按值传递
当你调用这个
mutate(pop.getIndividusList().get(1))
您正在发送pop的实例,因此它将得到更改
Supose
pop.getIndividusList().get(1)
returnString varibale
这样做然后调用
mutate(var)
# 2 楼答案
我不确定我是否理解这个问题,但我认为您的意思是,当您更改Population
po
中的项目时,Populationpop
中的项目反映了这些更改这确实是代码的预期行为:要填充
po
,您需要从pop
-(pop.getFittest, pop.getList.get(1) )
添加项但我相信,这些个体是对象的实例,因此添加/删除和类似操作使用对象的引用,而不是对象的副本。因此,当您有两个对同一obj的引用时,任何更改都会被镜像
如果要创建副本,应通过创建以另一个实例为参数的构造函数、实现复制方法或类似方法,向
po
添加具有相同状态的新对象应该是这样的: