Java 比较JUnit中的列表。它成功了,但我还没有覆盖equals。它是如何工作的?

Java 比较JUnit中的列表。它成功了,但我还没有覆盖equals。它是如何工作的?,java,unit-testing,list,collections,junit,Java,Unit Testing,List,Collections,Junit,我有一个包含基本字段的类,如下所示: public class Person{ String name; int age; int id; int height; public Person(String name, int age, int id, int height){ this.name = name; this.age = age; this.id = id; this.height =

我有一个包含基本字段的类,如下所示:

public class Person{  
  String name;  
  int age;  
  int id;  
  int height;  
  public Person(String name, int age, int id, int height){  
      this.name = name;
      this.age = age;  
      this.id = id;  
      this.height = height;  
  } 
  //other methods
}  
我想按年龄对不同的人进行分类:

Person p87 = new Person("John", 87, 123, 185);  
Person p22 = new Person("George", 22, 12, 180);  
//etc  ....for other persons. Then I create a list of them
List<Person> persons= Arrays.asList(p87, p22, p45, p31, p55, p62 );  
Collections.sort(persons, new Comparator<Person>() {

            @Override
            public int compare(Person p1, person p2) {
                return p1.age - p2.age;
            }

        });   

我不明白。那么,为什么在测试用例中2个列表以相等的方式通过呢?

在第一个示例中,您并没有创建新对象,而是在比较对同一对象的引用。这是因为
equals
的默认实现是比较参考等式

您正在执行与此等效的操作:

Person p22 = new Person("George", 22, 12, 180);   
Person p22_2 = p22;
assertEquals(p22, p22_2);   // works, because both refer to the same object

你是说
数组。asList(p22,p31,p45,p55,p62,p87)
在对
人员
列表进行排序后,在相同的位置创建一个具有相同引用的列表?现在我很困惑。我应该把测试用例看作是PASS还是应该在代码< >人>代码中重写<代码>等于<代码>,然后创建新的列表?@ USSR44706:<代码>我应该…创建新列表。这与清单无关。列表覆盖等于
我是否应该亲自重写equals
,这取决于您是否希望两个具有相同值的对象进行相等比较。通常你确实想要这样(但并非总是如此)<代码>是否应该将测试用例视为PASS<代码>?如果您正在测试排序,是的,它是有效的。如果您想测试
equals
是否以您想要的方式工作,那么请为此编写一个新的测试。每次测试只测试一件事。是的。我只对排序有效的情况感兴趣。因此,这是一次通过,因为在
集合之后,与以前相同的元素(从内存区域的角度)处于正确的位置。sort
。是吗?@user384706:如果我是你,我不会把它看作是“记忆区域”——这不是一个很好的引用类比。无法保证在排序前后对象在内存中的位置相同(特别是垃圾收集器可以随时移动内存中的对象)。您应该将引用视为唯一标识每个对象的不透明值,但实际数值对您不可见。如果有两个引用,可以询问它们是否指向同一个对象,但不能询问该对象在内存中的位置。
Person p22 = new Person("George", 22, 12, 180);   
Person p22_2 = p22;
assertEquals(p22, p22_2);   // works, because both refer to the same object