gpt4 book ai didi

JavaSE 在列表中添加对象但对象发生变化为什么?

转载 作者:行者123 更新时间:2023-12-01 11:42:14 24 4
gpt4 key购买 nike

我试图将形状对象的当前位置添加到我的数组列表中,但是当对象位置更改时,我的列表对象也会更改..

经过几个小时的搜索,我发现了一种不同的方式,现在即使对象位置发生变化,位置也保持不变

这是我的第一个导致数组列表发生变化的代码:

    MyPoint p11 = (MyPoint) getCorners()[0];
MyPoint p22 = (MyPoint) getCorners()[1];
MyPoint p33 = (MyPoint) getCorners()[2];
MyPoint p44 = (MyPoint) getCorners()[3];

这是第二个永远不会改变对象位置的代码

    MyPoint p11 = new MyPoint(getCorners()[0].getX(), getCorners()[0].getY());
MyPoint p22 = new MyPoint(getCorners()[1].getX(), getCorners()[1].getY());
MyPoint p33 = new MyPoint(getCorners()[2].getX(), getCorners()[2].getY());
MyPoint p44 = new MyPoint(getCorners()[3].getX(), getCorners()[3].getY());

当我使用下面的代码时,我正在监视输出,第一个代码他们改变了,第二个代码他们不改变

        System.out.println(nl.get(0).getCorners()[0].getX());
System.out.println(nl.get(0).getCorners()[1].getX());
System.out.println(nl.get(0).getCorners()[2].getX());
System.out.println(nl.get(0).getCorners()[3].getX());

我的问题是我想知道并学习两者之间的区别代码。

各位能帮我解释一下吗?

提前致谢...

最佳答案

当您执行 MyPoint p11 = (MyPoint) getCorners()[0]; 时,您仍然引用现有对象而不创建新对象,这意味着对现有对象的任何修改都会反射(reflect)在 p11 中

但是使用 MyPoint p11 = new MyPoint(getCorners()[0].getX(), getCorners()[0].getY()); 您正在创建新对象。因此对现有对象的任何修改都不会反射(reflect)在 p11

关于JavaSE 在列表中添加对象但对象发生变化为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29436288/

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