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与自身相等,但也使用“==”。