개발자가 내팔자

[Java] 문자열의 비교 본문

Programming Language/Java

[Java] 문자열의 비교

야생의 개발자 2022. 7. 14. 02:54

문자열 비교에는 == 대신 equals()를 사용해야 한다.

literal string으로 생성하면 string constant pool에 담기고,

new String()으로 생성하면 Heap영역에 생성된다.

원래 string pool은 Perm이라고 하는 영역에 있었다고 한다.

그러나 이는 고정사이즈이기 때문에 runtime에 확장되지 않으므로
string 값이 켜지면 OutOfMemoryException을 발생시킬 수 있어,

자바7부터는 String pool의 위치가 힙영역에 옮겨갔다고 한다.

String Pool이 Flyweight Pattern이라는 디자인 패턴을 구현한 대표적인 예시라고 한다.

예시를 통해 자세히 살펴보자.

Literal string

literal string

String str1 = "abc";
String str2 = "abc";

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

literal로 생성한 string이 같은 string이라면 같은 주소를 가지게 된다.

new operator

new를 이용하여 생성

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

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

new로 생성할 때마다 새로운 주소에 할당하게 된다.

Reference

https://www.baeldung.com/java-string-pool

 

Guide to Java String Pool | Baeldung

Learn how the JVM optimizes the amount of memory allocated to String storage in the Java String Pool.

www.baeldung.com

 

 

'Programming Language > Java' 카테고리의 다른 글

[Java] Arrays에서 자주 쓰는 메서드  (0) 2022.07.15
[Java] String 클래스  (0) 2022.07.14
[Java] 반올림 자릿수 정하기  (0) 2022.07.14
[Java] 연산자 우선순위  (0) 2022.07.14
[Java] 타입 간의 변환 방법  (0) 2022.07.14
Comments