JAVA

Object Class /equals() /==

jojelly 2020. 9. 2. 18:16
반응형

== 과 equals는 

두 주소값이 같은지 확인하는 메서드이다. 단, String 클래스에서 eqauls()를 재정의(오버라이딩ㅠ ) 하였기 때문에 String 타입이라면 값을 비교한다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package self_Am;
 
public class ObjectClass {
    public static void main(String[] args) {
        String data1 = new String("ABC");
        String data2 = new String("ABC");
        String data3 = "ABC";
        String data4 = "ABC";
    
        
        System.out.println(data1 == data2);
        System.out.println(data1.equals(data2));
        System.out.println(data1.equals(data3));
        System.out.println(data3.equals(data4));
        System.out.println(data3 == data4);
        System.out.println(data1 == data4);
    }
}
cs

결과

false

true

true

true

true

false

data1 == data2 ;는 A ,B의 을 비교하는게 아닌 주소를 비교하는 것이다. 

 

data1.equals(data2) 또한 ObjectClass 에서는 주소를 비교한다. 하지만 A,B가 String 일 경우에는

재정의가 되어 재정의된 을 비교한다. 

이러하기 때문에 String 을 비교할때에는 equals를 써주는게 좋다. 


 

추가적으로 ==에서 값을 비교하기 위해서는  A 뒤에 .intern을 사용하면

같은 값을 가지고 있는 B를 찾아가 주소를 리턴해주기때문에 true가 된다. 

(단, intern이 가능한건 data 3,4의 경우이다. new 를 사용하여 객체를 만들면  불가능하다. )

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package self_Am;
 
public class ObjectClass {
    public static void main(String[] args) {
        String data1 = new String("ABC");
        String data2 = new String("ABC");
        String data3 = "ABC";
        String data4 = "ABC";
    
        
 
        System.out.println(data3== data4);
        System.out.println(data3.intern() == data4);
    }
}
 
cs

결과

true

true

data3과 4는 같은 주소값을 가지고 있다.


(intern추가 예시)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package self_Am;
 
public class ObjectClass {
    public static void main(String[] args) {
        String data1 = new String("ABC");
        String data2 = new String("ABC");
        String data3 = "ABC";
        String data4 = "ABC";
    
        
 
        System.out.println(data3== data4);
        System.out.println(data3.intern() == data1);
        System.out.println(data1.intern() == data3);
        System.out.println(data1.intern() == data2.intern());
        System.out.println(data3.intern() == data4);
        
        //intern()
        //constant pool 에 같은 값을 검색하여 그 주소값을 반환해 준다. 
        
    }
}
 
cs

결과

true
false
true
true
true

반응형