Java 更改对象值
我为你在不实际使用操作的情况下改变对象中的字段而烦恼 例如,假设我有以下课程:Java 更改对象值,java,list,object,Java,List,Object,我为你在不实际使用操作的情况下改变对象中的字段而烦恼 例如,假设我有以下课程: public class MultisetPair { private Object element ; private int cardinality ; public MultisetPair(Object element) { this.element = element ; cardinality = 1 ; } public Objec
public class MultisetPair {
private Object element ;
private int cardinality ;
public MultisetPair(Object element) {
this.element = element ;
cardinality = 1 ;
}
public Object getElement() {
return element ;
}
public int getCardinality() {
return cardinality ;
}
public void setCardinality(int cardinality) {
if(cardinality < 1)
throw new IllegalArgumentException();
this.cardinality = cardinality ;
}
}
这不仅改变了我刚刚创建的对的基数,还将使multisetpair(3)处的对的基数增加1
为什么呢?它不应该只改变我创建的一对而不是实际的一对吗
谢谢
MultisetPair pair = multiset.get(3);
pair.setCardinality(pair.getCardinality()+1);
这不仅改变了我刚刚创建的对的基数,还将使multisetpair(3)处对的基数增加1
因为这两个物体。。。是相同的对象。上面没有两个物体。您有一个局部变量对
,它引用列表中位置3处的内容。这就是一切
当你把一个鸡蛋放进一个盒子里,让盒子开着,然后选择盒子里的第三个鸡蛋,并给它涂上颜色。。。然后那个盒子里的第三个鸡蛋被涂上颜色
换句话说:您可以有多个指向同一底层对象的引用。无论您使用哪个引用来访问该对象,只要您更改该对象的状态,该对象就会更新。让我们看看Javadoc of List的
get()
方法:
返回此列表中指定位置的元素
根据文档,它返回指定位置的元素,并且不创建新的实例。您得到的是位置3处元素的引用。因此,当您进行更改时,它将应用于现有元素,因为我们在代码中的任何地方都没有创建任何新元素(代码中没有构造函数调用)
MultisetPair pair = multiset.get(3);
pair.setCardinality(pair.getCardinality()+1);
MultisetPair pair = multiset.get(3);
pair.setCardinality(pair.getCardinality()+1);