equals()
- Object class에 정의된 메서드
- 두 객체의 메모리 주소를 비교
Object one = "hello world";
Object two = "hello world";
// 객체 비교
if(one.equals(two))
System.out.println("they are the same");
→ one, two 객체의 메모리 주소는 다르기 때문에 일치하지 않음.
✔️ 문자열 비교 시 메모리 주소를 비교하지 않음.
→ String의 equals는 Object class의 equals를 오버라이드(재정의) 한 것.
→ 따라서 아래 코드에서 equals는 Object class의 equals가 아니다.
String one = "hello world";
String two = "hello world";
// 문자열 비교
if(one.equals(two)){
System.out.println("they ar the same");
}
→ 위 one, two 문자열은 문자열 자체를 비교하는 것이므로 일치함.
※ Student, Person과 같이 특정 class에서 Object class의 equals method를 오버라이드(재정의) 하지 않은 경우
→ Object class의 equals를 사용하게 된다.
Comparable Interface
- 객체에서 원하는 자료형으로 비교하기 위해 사용하는 인터페이스
- 같은 자료형의 다른 객체 하나를 인자로 받아와 비교하는 compareTo method를 사용
✔️ compareTo 메서드
- 같은 자료형의 두 데이터를 비교할 수 있는 메서드
- Comparable 인터페이스에 있는 유일한 메서드
- Comparable 인터페이스를 구현(implements) 하기 위해서는 compareTo 메서드만 있으면 됨.
Interface Comparable<T> {
public int compareTo(T obj) {
}
}
a.compareTo(b)
// 1
if(a < b) return < 0
// 2
if(a == b) return 0
// 3
if(a > b) return > 0
1. a가 b보다 작은 경우 → 0보다 작은 수 반환
2. a와 b가 같은 경우 → 0 반환
3. a가 b보다 큰 경우 → 0보다 큰 수 반환
- 이제 여러 문자열을 정렬하거나 두 문자열이 같은지 알고 싶을 때 compareTo 메서드를 호출하면 됨.
if(((Comparable<T>) data).compareTo(obj) == 0) // then ar the same
→ 여기서 T는 Type를 의미
- 위 코드는 Comparable로 형변환 해준 것이기 때문에 compareTo를 호출하면 Comparable에 있는 compareTo를 호출한 것이다.
- data와 obj는 같은 타입이기 때문에 compareTo를 사용할 수 있다.
✔️ 참고
'Java' 카테고리의 다른 글
[Java 07] 매개 변수화 타입(Parameterized Type) (0) | 2023.08.09 |
---|---|
[Java 06] Generic Programming (0) | 2023.08.09 |
[Java 04] 객체와 상속 (0) | 2023.08.08 |
[Java 03] 객체지향 프로그래밍 1 - 객체, 클래스, OOP란? (0) | 2023.07.20 |
[Java 02] 배열 생성과 주의 사항, 다차원 배열 (2) | 2023.07.19 |