its_jh_stroy

[Java] == 연산자와 equals() 메서드 본문

Java

[Java] == 연산자와 equals() 메서드

_J_H_ 2024. 5. 25. 16:45

== 연산자

기본 타입의 경우 값을 비교하고 참조 타입은 메모리 위치 값을 비교한다.

 

qeuals

참조 타입에서 객체의 실제 값을 비교하기 위해 사용된다.

하지만 오버라이드하지 않으면 객체의 참조 값을 비교하므로 값 비교를 위해 별도의 오버라이드가 필요하다.

String 타입의 경우 미리 오버라이드 되어 제공된다.

 

문자열 상수 풀(String Constant Pool)과 new

자바에서 문자열을 만드는 방법은 두 가지가 문자열 리터럴을 대입하는 방법과 new를 통해 생성하는 방법이 있다.

 

문자열 리터럴을 생성하여 변수를 생성하면 해당 리터럴은 힙 영역의 문자열 상수 풀이라는 공간에 저장된다.

이후 같은 문자열로 변수를 생성하려고 하면 미리 저장된 풀의 문자열을 참조한다.

이미 풀에 저장된 문자열 리터럴을 통해 변수를 생성하면 같은 참조를 가지는 것이다.

String str1 = "Hello";
String str2 = "Hello";

// true
System.out.println(str1 == str2); 

// true
System.out.println(str1.equals(str2));

 


new를 사용하면 힙 영역에 새로은 문자열 객체를 생성하여 저장한다.

따라서 동일한 문자열을 가지는 변수를 생성해도 서로 다른 주소를 참조하게 되는 것이다.

String str1 = "Hello";
String str2 = new String("Hello");

// false
System.out.println(str1 == str2);

// true
System.out.println(str1.equals(str2));