Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 保留分配给“的变量值”;这";_Java - Fatal编程技术网

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
引用相同的对象,因此显然它们总是相同的。