What will be printed after execution of this code?

class User {
	private String name;
	
	public User( String name ) {
		this.name = name;
	}

	public boolean equals( Object obj ) {
		User user = (User) obj;
		return user.name.equals( name );
	}

	public String toString() {
		return name;
	}
}

class Foo {
	public static void main(String...arguments) {  //1
		User user1 = new User( "John" ); 
		User user2 = new User( "Bill" ); 
		User user3 = new User( "John" ); 

		Set<User> userSet = new HashSet<User>();
		userSet.add( user1 );
		userSet.add( user2 );
		userSet.add( user3 );  //2

		System.out.println( "Count of users: " + userSet.size() );  //3
	}
}
Explanation
As known, implementation of an interface Set can not contain the same objects.
In our case, 3 objects will be placed in Set. Objects user1 and user3 are not the same, despite the fact that the equals() method returns true while comparing these objects. It is not enough to override only equals() method.
Equal object must have also the same hash code. In order to do this, you must override the hashCode(). The correct answer - 3 will be printed..

Следи за CodeGalaxy

Мобильное приложение Beta

Get it on Google Play
Обратная Связь
Продолжайте изучать
тесты по Java
Cosmo
Зарегистрируйся сейчас
или Подпишись на будущие тесты