コード例 #1
0
 @Test
 public void testEquals() throws Exception {
   // Объекты разные и начинка разная
   assertFalse(user1.equals(user2));
   // Объекты разные, а начинка одинаковая. Хотя hashCode и равен у обоих объектов, но
   // на equals() это не влияет, т.к. он не переопределен.
   assertFalse(user1.equals(user3));
   assertFalse(user1 == user3);
   assertTrue(user1.hashCode() == user3.hashCode());
   // Один объект
   assertTrue(user1.equals(user1));
 }
コード例 #2
0
  /**
   * Тестирование на HashMap
   *
   * @throws Exception
   */
  @Test
  public void testOnHashMap() throws Exception {
    Map<UserHashcode, Picture> users = new HashMap<>();
    users.put(user1, user1.getPicture());
    assertTrue(users.containsKey(user1));

    // user3 копия user1 но не содержится в ключах Map. Поиск идет по equals, а он не переопределен
    assertFalse(users.containsKey(user3));

    // В Map есть только user1, но присутствует value для user3,
    // т.к. у класса Picture переопределены оба метода, хотя объекты pic1 и pic3 разные по ссылкам
    assertTrue(users.containsValue(pic3));
    // Объекты разные, а хэш-коды - одинаковые
    assertFalse(pic1 == pic3);
    assertEquals(pic1.hashCode(), pic3.hashCode());

    users.put(user2, user2.getPicture());
    users.put(user3, user3.getPicture());

    // user3 не перезатирает user1, т.к. ключи не равны по equals, а только по hashCode
    assertEquals(3, users.size());
  }