1. Object 클래스의 equals() 메소드를 오버라이딩 한 클래스


1) String 클래스: 객체 내의 문자열이 같은지 판단

2) wrapper 클래스: 객체가 가지고 있는 데이터의 값이 같은지 판단     

ex. Integer, Double, Float, Byte, ...


3) Date 클래스: 같은 날짜를 가지고 있는지 판단

4) File 클래스: 같은 경로명을 표현하고 있는지 판단



# equal() 메소드를 오버라이딩한 예

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package objectex;
 
import java.io.File;
import java.util.Date;
 
public class ObjectTest06 {
    public static void main(String[] args) {
 
        // 1. String
        String str1 = new String("java");
        String str2 = new String("java");
        String str3 = new String("python");
        System.out.println("str1.equals(str2): " + (str1.equals(str2)));
        System.out.println("str1.equals(str3): " + (str1.equals(str3)));
        
        // 2. wrapper: Integer, Double, Byte, ...
        Integer i1 = new Integer(10);
        Integer i2 = new Integer(10);
        System.out.println("i1.equals(i2): " + (i1.equals(i2)));
        
        // 3. Date
        Date d1 = new Date();
        Date d2 = new Date();
        System.out.println("d1.equals(d2): " + (d1.equals(d2)));
        
        // 4. File
        File f1 = new File("경로명");
        File f2 = new File("경로명");
        System.out.println("f1.equals(f2): " + (f1.equals(f2)));
        
        
    }
}
 
# 실행 결과
str1.equals(str2): true
str1.equals(str3): false
i1.equals(i2): true
d1.equals(d2): true
f1.equals(f2): true
cs

# 설명

- equals() 메소드는 단순히 값을 비교하는 것이지 주소값을 비교하는 것이 아니다. 

예를 들어, str1.equals(str2)는 값이 'java'로 같으므로 반환값이 true가 되는 것이고,

str1 == str2 를 한다면 new 를 통한 객체 생성을 했기 때문에 주소값이 각기 다르게 된다. 

따라서 반환값은 false가 나오게 된다. 



# Object 클래스의 메소드를 활용한 예시 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package objectex;
 
class Test {}
 
public class ObjectTest07 {
    public static void main(String[] args) {
 
        Test t = new Test();
        System.out.println(t);              // 16진수 
        System.out.println(t.hashCode()); // 10진수 
        
        // 체인 시스템
        System.out.println(t.getClass().getName() + "@" + Integer.toHexString(t.hashCode()));
    }
}
 
# 실행 결과
objectex.Test@3d012ddd
1023487453
objectex.Test@3d012ddd
cs

# 설명

Line 9: 객체 t의 주소값을 16진수로 출력한다.

Line 10: 객체 t의 주소값을 10진수로 출력한다.

Line 13: Line 9와 같은 결과값을 나타내기 위해 Object 클래스의 메서드를 활용하여 체인 시스템을 나타낸다. 

- getClass(): class objectex.Test

- getClass().getName(): objectex.Test

- Integer.toHexString(t.hashCode()): 10진수로 나타낸 주소값을 16진수로 변환하여 나타낸다.