Java 保留分配给“的变量值”;这";
我正在努力实现以下目标Java 保留分配给“的变量值”;这";,java,Java,我正在努力实现以下目标 Model model1 = this; this.remove(index); Model model2 = this; 然后我想比较一下model1和model2,看看有什么变化。但是,只要我调用remove,model1也会更改。有没有办法使model1保持固定?我试过final,结果也一样。我还尝试使用数组,但也不起作用 此是DefaultListModel DefaultListModel的文档 当你这样做的时候 Model model1 = this; 实
Model model1 = this;
this.remove(index);
Model model2 = this;
然后我想比较一下model1
和model2
,看看有什么变化。但是,只要我调用remove,model1
也会更改。有没有办法使model1
保持固定?我试过final,结果也一样。我还尝试使用数组,但也不起作用
此
是DefaultListModel
DefaultListModel的文档
当你这样做的时候
Model model1 = this;
实际上,您正在将对象引用此
指向变量model1
。当你这样做的时候
Model model2 = this;
您也在做同样的操作,将相同的
此
引用分配给变量model2
。在代码中,this
、model1
和model2
都指向同一个对象。通过哪个引用来更改单个对象的状态并不重要,它仍然是同一个对象,并且通过这些变量中的任何一个都可以看到相同的状态。您实际需要的是一个对象的副本,其中所有相关的状态变量都被复制,通常称为副本或深度副本,具体取决于您的具体需求。创建DefaultListModel
的新实例并将当前实例中的所有元素添加到新模型就足够了,还是您实际上也需要创建这些对象的副本,这完全取决于您的用例。如果不确切知道getModel()是什么,这个问题是无法回答的
返回以及删除(…)
执行的操作。它看起来像是getModel()
返回可变的内部状态,而remove(index)
会对该状态进行变异。这是对的吗?很不清楚你想做什么。一些更相关的代码将有助于确定问题(即remove()
和Model
的定义)。编辑了这篇文章,并作了进一步澄清。getModel实际上是多余的,我忘了把它取出来。“this”是来自JavaFX的DefaultListModel。您需要创建一个新对象。听起来您不明白赋值运算符(=
)的作用。它不会创建其右侧的副本。在您的示例中,model1
和model2
引用相同的对象,因此显然它们总是相同的。