String 클래스를 통해 문자열 생성 방법

- String 클래스는 기본형이 아니라 참조형이다.

- 문자열은 매우 자주 사용되어 자바 언어에서는 아래 1번과 같이 작성해도 new String("hello")와 같이 변경해준다.

1. String str1 = "hello";
2. String str1 = new String("hello");

 

String 클래스 - 비교

동일성(Identity) : == 연산자를 사용해서 두 객체의 참조가 동일한지 확인

동등성(Equality) : equals() 메서드를 사용하여 두 객체가 논리적으로 같은지 확인

String str1 = "hello";
String str2 = new String("hello");
String str3 = new String("hello");

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

 

문자열 풀

- String str = "hello"와 같이 문자열  리터럴을 사용하는 경우 자바는 메모리 효율성과 최적화를 위해 풀을 사용한다.

- 자바가 실행되는 시점에 문자열 리터럴이 있으면 문자열 풀에 String 인스턴스를 만들어둔다.

- 같은 문자열이 있으면 String 인스턴스를 만들지 않고 동일한 문자열에 인스턴스를 찾고 해당 인스턴스를 참조한다.

String str1 = "hello";
String str2 = "hello";

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

불변 객체

1. 변경이 필요한 경우 기존 값을 변경하지 않고 새로운 결과를 만들어서 반환한다.

2. String 내부의 값을 변경할 수 있다면 기존에 문자열 풀을 통해 같은 문자를 참조하는 변수의 String값이 변경되는 문제가 생길 수 있음

// 1번 예제
String str1 = "hello";
str1.concat("java");
String str2 = str1.concat(" java");

System.out.println("str1 = " + str1); // hello
System.out.println("str2 = " + str2); // hello java

// 2번 예제
String str3 = "hello";
String str4 = "hello";
str2 = "bye";

System.out.println("str3 = " + str3); // hello
System.out.println("str4 = " + str4); // bye

 

StringBuilder 가변 String

- 내부의 값을 변경할 수 있는 String

- 변경된 값을 사용할때 불변 객체와 다르게 새로운 객체를 생성하지 않는다.

- 내부의 값을 변경할때마다 새로운 객체를 생성하는게 아니기 때문에 성능과 메모리 측면에서 효율적이다.

불변 객체 값 변경

// 문자열 변경시 동작 순서
String str = String("A") + String("B") + String("C") + String("D");

// 1
String str = new String("AB") + String("C") + String("D");

// 2
String str = new String("ABC") + String("D");

// 3
String str = new String("ABCD");

- 1번과 2번에서 생성된 new String("AB")과 new String("ABC")은 사용되지 않는다.
- 이후에 GC의 대상이 된다.

가변 객체 값 변경

 StringBuilder sb = new StringBuilder();
 
 sb.append("A");
 sb.append("B");
 sb.append("C");
 sb.append("D");
 
 System.out.println("sb = " + sb); // ABCD

 

'인강 > 자바(중급1편)' 카테고리의 다른 글

불변 객체  (0) 2024.05.06
Object 클래스  (0) 2024.04.23

+ Recent posts