티스토리 뷰

[Java] equals와 ==의 차이점

JoonPyo-Hong 2021. 8. 23. 15:29
반응형

equals (데이터 값 비교) == (주소값 비교) 차이

equals 는 데이터 값을 비교하는 메소드 이며,

== 은 주소값을 비교해주는 비교 연산자 이다.

public class Test{
	public static void main(String[] args){
    	Stirng A = "Java"; // 리터럴(literal)       		주소값 : 1000 (예시 - 실제주소는 다름)
        Stirng B = "Java"; // 리터럴(literal)			주소값 : 1000
    	Stirng C = new Stirng("Java"); // new 연산자	주소값 : 2000
        Stirng D = new Stirng("Java"); // new 연산자	주소값 : 3000
	}
}

리터럴(literal)을 사용해서 String을 생성하면 String Constant Pool 영역에 존재하고,

new 연산자를 통해 String을 생성하면 Heap 영역에 존재하게 된다. 

A와 B는 String Constant Pool 영역에 만들어진 하나의 객체를 참조하고,

C와 D는 Heap 영역에 각각 개별의 객체가 생성된다.

A와 B 1개 + C와 D 2개 = 3개의 String 객체가 생성됬다.

 

결과

System.out.println( A == B );  // true        주소값 : 1000 == 1000
System.out.println( B == C );  // false       주소값 : 1000 == 2000
System.out.println( C == D );  // false       주소값 : 2000 == 3000

System.out.println( A.equals(B) );  // true   
System.out.println( B.equals(C) );  // true   
System.out.println( C.equals(D) );  // true

 

A와 B는 같은 주소값 (String Constant Pool 영역의 같은 객체)

B와 C는 다른 주소값 (String Constant Pool 영역과 Heap 영역의 다른 객체)

C와 D는 다른 주소값 (Heap 영역의 각각 다른 객체)

 

자바(Java)에서 문자열(String)을 비교를 할 때는 equals 메소드를 사용하자.

equals의 반대는 !(NOT) 연산자를 붙여주면 된다.

System.out.println( !A.equals(B) );

 

반응형
댓글
반응형