当我更改Array<>项目的值时将其分配给临时变量后,主变量值也会发生变化。
Array<Cards> cards = new Array<Cards>();
//add items to cards
Iterator<Cards> iterator = cards.iterator();
while(iterator.hasNext()){
Cards c = iterator.next();
Cards Temp = c;
//when I change values of temp...the value of c also changes
//overall changing the value of cards
}
有什么方法可以改变Temp的价值而不是c或卡?
我目前正在使用libgdx为Android制作游戏。
答案 0 :(得分:5)
您需要复制c
引用的对象。您当前正在做的只是创建对同一对象的另一个引用。根据{{1}}实施和您的需求,您可以Card
或明确地创建新的clone
。
答案 1 :(得分:1)
通过调用.clone()
方法,您可以获得Object
的副本,而不是对它的引用。
正如@CharlesDurham所说:
.clone()
将产生一个浅层副本,它是一个新的Card实例,但如果c有任何对象引用,新卡将具有与c相同的引用,除非你实现了Cloneable接口,那么你可以实施深度克隆。
Array<Cards> cards = new Array<Cards>();
//add items to cards
Iterator<Cards> iterator = cards.iterator();
while(iterator.hasNext()){
Cards c = iterator.next();
Cards Temp = c.clone();
//when i change values of temp...the value of c also changes
//overall changing the value of cards
}
或者你也可以这样new Cards(c)
:
Array<Cards> cards = new Array<Cards>();
//add items to cards
Iterator<Cards> iterator = cards.iterator();
while(iterator.hasNext()){
Cards c = iterator.next();
Cards Temp = new Cards(c);
//when i change values of temp...the value of c also changes
//overall changing the value of cards
}