Java 如何检测相同类型的两个对象中的所有变量是否相同?
假设我有两个对象,Java 如何检测相同类型的两个对象中的所有变量是否相同?,java,variables,equality,Java,Variables,Equality,假设我有两个对象,A和B其中 Object A=new Object(); Object B=A; 默认情况下,这些对象都有两个整数:intx和inty。首先,在A和B中 (X == 0) && (Y == 0) 所以,你可以说这两者是相等的,Java也是一样。现在,假设我们更改A.X,使A.X=2。现在,A和B不再相等,因为 A.X==2 ……但是 B.X==0 然而,Java仍然表示它们是平等的 (A.equals(B)) == true (B.equals(A)) ==
A
和B
其中
Object A=new Object();
Object B=A;
默认情况下,这些对象都有两个整数:intx
和inty
。首先,在A
和B
中
(X == 0) && (Y == 0)
所以,你可以说这两者是相等的,Java也是一样。现在,假设我们更改A.X
,使A.X=2
。现在,A
和B
不再相等,因为
A.X==2
……但是
B.X==0
然而,Java仍然表示它们是平等的
(A.equals(B)) == true
(B.equals(A)) == true
那么,如何解决这个问题呢?您需要重写包含变量的类的.equals方法。看看这个问题:您需要重写包含变量的类的.equals方法。看看这个问题:如果
Object
真的是你自己的类,而不是java.lang.Object
(如果是,那么它会有那些变量x
和y
),那么它真的是一个糟糕的类名选择
类必须重写.equals
方法,如下所示:
@Override
public boolean equals(Object obj) {
if(this == obj) return true;
if(!(obj instanceof MyObject)) return false;
MyObject other = (MyObject) obj;
return other.x == this.x && other.y == this.y;
}
如果
Object
确实是您自己的类,而不是java.lang.Object
(如果是,那么它将包含那些变量x
和y
),那么它确实是一个糟糕的类名选择
类必须重写.equals
方法,如下所示:
@Override
public boolean equals(Object obj) {
if(this == obj) return true;
if(!(obj instanceof MyObject)) return false;
MyObject other = (MyObject) obj;
return other.x == this.x && other.y == this.y;
}
这样做
对象B=A代码>,您没有创建新对象,但B
仅指向a
。所以这只是一个目标
因此,当您更改A.X=2
时,B.X
在引用相同变量时也是2,因此相等。
您可以通过打印B.X
值来验证这一点。执行此操作对象B=A代码>,您没有创建新对象,但B
仅指向a
。所以这只是一个目标
因此,当您更改A.X=2
时,B.X
在引用相同变量时也是2,因此相等。
您可以通过打印B.X
值来验证这一点。我认为每个人(除了辛格先生)都缺少一点:
Object A=new Object(); // Implication is that this is really a user-defined class
Object B=A;
这里只有一个对象。如果对对象a进行更改,同样的更改将出现在对象B中,因为它们是完全相同的对象。我认为每个人(辛格先生除外)都忽略了一点:
Object A=new Object(); // Implication is that this is really a user-defined class
Object B=A;
这里只有一个对象。如果对对象a进行更改,则相同的更改将出现在对象B中,因为它们是完全相同的对象。您的变量指向相同的对象。如果他们不平等,我会担心的!A和B是同一个对象,因此B.X==2。变量指向同一个对象。如果他们不平等,我会担心的!A和B是同一个对象,所以B.X==2。啊,好的。那么,我是否可以创建对象的精确副本作为新对象,而无需为其创建新构造函数?@StevenFontaine在类中创建一个**复制构造函数**(将值从参数复制到自身),然后通过将a
传递为arment来使用相同的方法创建对象B作为:object B=new object(a)代码>。如果你需要帮助,请告诉我。只有一个问题。。构造函数的主体将包含什么内容?只需几行就可以将每个变量从A
复制到B
?啊,好的。那么,我是否可以创建对象的精确副本作为新对象,而无需为其创建新构造函数?@StevenFontaine在类中创建一个**复制构造函数**(将值从参数复制到自身),然后通过将a
传递为arment来使用相同的方法创建对象B作为:object B=new object(a)代码>。如果你需要帮助,请告诉我。只有一个问题。。构造函数的主体将包含什么内容?将每个变量从A
复制到B
只需几行?