Java 对另一个对象执行某些操作时,当前对象的属性值会发生更改
我正在开发一些简单的java程序,我面临着这个问题: 我有一个代表帐号的card类,我正在尝试使用以下方法获取所有可选帐号:getValidCards givennumbers(其中有9个号码) 方法:getAlternativeNumbers是Number类中计算单个可选数字的方法。 在我的班级考试中,我打电话给Java 对另一个对象执行某些操作时,当前对象的属性值会发生更改,java,oop,junit,Java,Oop,Junit,我正在开发一些简单的java程序,我面临着这个问题: 我有一个代表帐号的card类,我正在尝试使用以下方法获取所有可选帐号:getValidCards givennumbers(其中有9个号码) 方法:getAlternativeNumbers是Number类中计算单个可选数字的方法。 在我的班级考试中,我打电话给 Assert.assertEquals(cardToTest.getValidCards(),"899999999"); 班级卡: private List<Number&g
Assert.assertEquals(cardToTest.getValidCards(),"899999999");
班级卡:
private List<Number> numbers;
public String getValidCards(){
List<Card> toReturn = new ArrayList<>();
Card accountNumber;
for(int index=0 ; index < 9 ; index ++){
accountNumber = new Card(numbers);
List<number> alternatives = accountNumber.numbers.get(index).getAlternativeNumbers();
for(int j=0 ; j < alternatives.size(); j++){
accountNumber.replace(index, alternatives.get(j));
if(accountNumber.isValid()){
toReturn.add(accountNumber);
}
}
}
return printFinalListOfNumbers(toReturn);
}
当我初始化accountNumber=新卡(数字)时,这是对属性数字进行操作的;它使用的是已更改的数字,但我更改的是对象AccountNumber的数字,而不是我在测试中调用的对象的数字:card.getValidGits()
如果有人知道答案,请帮助..使
卡
构造函数复制传入的参数,例如
public Card(List<Number> numbers) {
this.numbers = new ArrayList<>(numbers);
}
公共卡(列表编号){
this.numbers=新的数组列表(numbers);
}
这样,内部的
编号
将是一个单独的副本,其内容与创建期间相同。您有一个由多个卡片
对象共享的可变编号
列表。如果你像这样修改它,数字当然会改变。数字不是真正共享的,当我创建一个以数字为参数的新对象时,就好像我创建了一个不共享的新数字,它不是卡的相同数字,不是吗?当然不是。仅仅通过传递参数并不能神奇地创建新对象。它只是对传递的原始单个列表的引用,因此所有卡
对象都共享相同的编号
。显然它是共享的。如果你不这么认为,请提供你认为实现非共享语义的代码。好吧,我理解,对数字的引用,我不认为它会像这样运行,你认为我的解决方案是什么,让新卡对象引用另一个数字,而不影响原来的数字?
public Card(List<Number> numbers) {
this.numbers = new ArrayList<>(numbers);
}