개발 무지렁이

[Java] Immutable Object(불변객체) String과 StringBuilder 본문

Backend/자바

[Java] Immutable Object(불변객체) String과 StringBuilder

Gaejirang-e 2023. 4. 7. 17:48

String은 상수이다.


한 번 만들어지면 값변경이 불가, immutable
String str = "java";
str = "java2";
❓ 위의 코드는 정상적으로 실행된다. WHY?

값변경을 하는게 아니라 새로운 객체가 만들어진다.
수정 전의 객체는 garbage collection이 일어난다.

String str = new String("java");


String str = "java"; 는 축약표현이다.
사실은 '객체생성연산자(new)'를 통해 객체를 생성하는 것이다.

❗ 주의
new 키워드 없이 할당한 값이 이미 있으면 같은 주소를 저장한다.
  String str1 = "java";
  String str2 = new String("java");
  String str3 = "java";

str1 == str2 -- (x)
str1 == str3 -- (o) // 단, 주소가 같다는 것이지 문자열자체를 비교해서 같다는 것은 아니다.
(⚠️ String의 문자열자체의 비교는 equals() 메서드를 이용한다.)

StringBuilder


문자열 값변경이 가능하다.
(문자열을 지속적으로 변경해야하는 상황)
  StringBuilder builder = new StringBuilder();
  builder.append("java");
  builder.append(" script");
  System.out.println(builder.toString());
Comments