반응형
equals() 메서드
매개변수로 객체의 참조변수를 받아서 비교하여 그 결과를 boolean값으로 알려 주는 역할을 한다. 객체를 생성할 때, 메모리의 비어있는 공간을 찾아 생성하므로 서로 다른 두 개의 객체가 같은 주소를 갖는 일은 있을 수 없다.
아래 코드는 멤버변수 10을 받고 있다. 멤버 변수가 같더라도 객체의 주소는 다르기 때문에 v1과 v2는 다르다는 결과가 나온다.
public class Ex9_1 {
public static void main(String[] args) {
Value v1 = new Value(10);
Value v2 = new Value(10);
if (v1.equals(v2))
System.out.println("v1과 v2는 같습니다.");
else
System.out.println("v1과 v2는 다릅니다.");
}
}
class Value {
int value;
Value(int Value) {
this.value = value;
}
}
hashCode()
이 메서드는 해싱(hashing) 기법에 사용되는 해시함수를 구현한 것이다. 해싱은 데이터관리기법 중의 하나로 다량의 데이터를 저장하고 검색하는 데 유용하다. 일반적으로 해시코드가 같은 두 객체가 존재할 수 있지만, Object클래스에 정의된 hashCode메서드는 객체의 주소값을 이용해서 해시코드를 만들어 반환하기 때문에 서로 다른 두 객체는 같은 해시코드를 가질 수 없다.
public class Ex9_3 {
public static void main(String[] args) {
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1.equals(s2)); //true
System.out.println(s1.hashCode()); //equals가 true면 hashCode값이 같아야함.
System.out.println(s2.hashCode());
System.out.println(System.identityHashCode(s1));
System.out.println(System.identityHashCode(s2));
}
}
String클래스는 문자열의 내용이 같으면, 동일한 해시코드를 반환하도록 hashCode메서드가 오버라이딩 되어있다. 문자열의 내용이 같은 s1, s2에 대해 hashCode()를 호출하면 항상 동일한 해시코드값을 얻는다.
반응형
'Java' 카테고리의 다른 글
[Java] Calendar 클래스, getInstance() 메서드 (0) | 2023.07.11 |
---|---|
[java] 컬렉션 프레임웍 - List, Set, Map (3) | 2023.06.11 |
Java 캡슐화와 접근 제어자(게터와 세터) (0) | 2023.04.24 |
HashMap 개념 및 예제 (2) | 2023.04.21 |
Java 예외처리(exception handling) (1) | 2023.04.21 |