Java 将一个类分配给两个变量并进行比较
抱歉,如果以前有人问过这个问题,但我想知道: 假设我创建一个类的新实例并将其分配给一个变量,例如:Java 将一个类分配给两个变量并进行比较,java,Java,抱歉,如果以前有人问过这个问题,但我想知道: 假设我创建一个类的新实例并将其分配给一个变量,例如:MyClassName myclass=newmyclassname(一些参数)并将其分配给另一个变量或将其放入列表中,例如:List.add(myclass)。如果我在If子句If(list.get(0).equals(myclass)中比较这两者,它会返回true吗 如果问题有点模糊或不清楚,请原谅。java中匹配对象的两种方法: 将一个对象与另一个对象匹配,如:obj1==obj2 另一个是o
MyClassName myclass=newmyclassname(一些参数)代码>并将其分配给另一个变量或将其放入列表中,例如:List.add(myclass)代码>。如果我在If子句If(list.get(0).equals(myclass)
中比较这两者,它会返回true吗
如果问题有点模糊或不清楚,请原谅。java中匹配对象的两种方法:
将一个对象与另一个对象匹配,如:obj1==obj2
另一个是obj1.equals(obj2)…在本例中,obj1必须有一个名为equals的方法
现在,在第二种情况下会发生什么:equals
方法在大多数情况下是自定义设计的,即您必须提供它。在某些情况下(对于内置类)所以,我希望你理解,<代码> Obj1= Obj2< /Cord>不调用<代码>等值< /C>方法。这是因为java没有像C++那样的任何操作符重写的花哨事物。因此,等于方法通常用来检查两个对象内容是否相同。或者不是
那么,当您执行obj1==obj2
时会发生什么呢?它只是检查obj1
的对象引用是否与obj2
相同。这意味着它们的目标是否相同。因此,obj1==obj2
可能会返回false,即使有相同的内容
让我给你举个例子:
class SomeClass {
private int x;
public SomeClass(int x) {
this.x = x;
}
public boolean equals(SomeClass o) {
return this.x == o.x;
}
}
现在,编写一些测试:
SomeClass a = new SomeClass(12);
SomeClass b = new SomeClass(12);
SomeClass c = a;
System.out.println(a == c); // print true
System.out.println(a == b); // print false
System.out.println(a.equals(c)); // print true
System.out.println(a.equals(b)); // print true
希望这能澄清一切。如果有什么不清楚的地方,请在评论中询问我。您尝试过吗?您是否实现了.equals
?尝试时会发生什么?您是否遇到过对同一对象的两个引用不被视为“相等”的情况?您是否有一个代码以意外方式运行的示例?@hev1 OP专门询问同一个对象。@chrylis小心光学-我知道,但答案取决于equals是否正确实现(或是否未实现)。根据定义,对象使用.equals与自身相等,但也使用“==”。