gpt4 book ai didi

java - 为什么最终的合集仍然会更新?

转载 作者:行者123 更新时间:2023-12-01 07:02:31 25 4
gpt4 key购买 nike

我有这段代码,我在其中存储两个集合,然后添加一个事件监听器(这里没有 lambda - 我需要坚持使用 Java 7 ;))。

    // rri is a ReturnRequestInterface 
final Collection<BigDecimal> selectedItems = rri.getSelected();
final Collection<BigDecimal> unselectedItems = rri.getUnSelected();

rri.addInformationChangeEventListener(new ComponentInformationChangeListener() {

@Override
public void informationChange(RequestChangeEvent event) {

ReturnRequestInterface source = (ReturnRequestInterface) event.getSource();
boolean debug1 = source.getSelected().containsAll(selectedItems);
boolean debug2 = source.getUnSelected().containsAll(unselectedItems);

}

});

我最初对此进行了调试,并且集合已正确设置。它不包含任何对象,因为代码刚刚初始化。

调试监听器(由于选择了项目而触发了该事件)让我感到困惑。 boolean 值 debug1debug2 均为 true,因为集合 selectedItemsunselectedItems 已根据项目选择进行更新。因此,事件源集合包含与声明的最终集合相同的项目(selectedItemsunselectedItems)。

这两个宣布的最终 Collection 品不是必须保持原样吗?

最佳答案

final 只是意味着已声明为 final 的变量不能更改,并且不能继承 final 的类。所有非原始变量在 Java 中都是引用,这意味着它们“指向”或引用对象的实例,但本身不是对象。

你所指的是不可变对象(immutable对象),它是一个final类的实例,它的所有字段都是finalprivate 并且没有 setter。

希望这有助于澄清。

关于java - 为什么最终的合集仍然会更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38327264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com