gpt4 book ai didi

java - 有关 Java 中对象相等性的一般信息

转载 作者:行者123 更新时间:2023-12-02 05:27:01 24 4
gpt4 key购买 nike

我目前正在学习 Java 游戏开发,并正在尝试使用 vector/点而不是基元来定位实体。在整个实验过程中,我发现了一些关于对象工作方式的东西,但我不知道如何解决,请考虑这个例子..

Point p1 = new Point(0, 0);
Point p2 = p1;

p1.x++;

if (p1 == p2) System.out.println("these are the same");

更改 p1 的坐标后,println 仍会被处理,并且经过调试,我发现通过设置 p2 = p1,p1 发生的任何更改也会对 p2 进行。

最终我想知道这是为什么。对象名称只是指向内存中某个位置的指针,并且这两个点都指向一个位置吗?

另外,有没有办法解决这个问题?

最佳答案

正如你所说:

Are the object names just a pointer to a location in memory 
and both of these Points are pointing to one location?

是的。

在 C 语言中,这将是这样的:

Point* p1 = (Point*)malloc(sizeof(Point));
Point* p2 = p1;

解决方案当然是在两个指针上有两个不同的对象:

Point* p1 = (Point*)malloc(sizeof(Point));
Point* p2 = (Point*)malloc(sizeof(Point));

或者像 Java 中一样:

Point p1 = new Point(0, 0);
Point p2 = new Point(0, 0);

或者也许只是像这样初始化第二个:

Point p2 = new Point(p1.getX(), p1.getY());

还值得注意的是,对于对象,在Java中,==运算符是引用相等,又名“this是否指向同一个对象”。如果您想根据内容比较两个对象,那么您应该重写 .equals() 方法。大多数 IDE 可以根据给定类中的属性自动生成它。

关于java - 有关 Java 中对象相等性的一般信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25909649/

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