次のようなプリミティブフィールドを持つクラスがあります。
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;
}
});
ここで、正しくソートされているかどうかをテストしたいので、次のJUnitテストケースがあります。
assertEquals(Arrays.asList(p22, p31, p45, p55, p62, p87 ), persons);
テストケースは合格です。だからそれはソートされています。
しかし、私はこれを理解していません。は、含まれている各オブジェクトでを呼び出すList.equalsを使用して2つのassertEquals
リストを比較します。問題は、クラスで
オーバーライドしていないことです。
その結果、以下は失敗します: equals
equals
Person
Person p22 = new Person("George", 22, 12, 180);
Person p22_2 = new Person("George", 22, 12, 180);
assertEquals(p22, p22_2);
わかりません。それでは、なぜ2つのリストがテストケースで同等として合格したのでしょうか。