[Java] 9장 - String 클래스

N’oublie pas de t’aimer·2025년 1월 5일

Java

목록 보기
4/18

String 클래스

데이터(char[]) + 메서드(문자열 관련)

C언어는 객체지향 언어가 아니어서, char 데이터를 배열에 저장하는 것은 동일하지만 문자열 관련 메서드가 따로 존재한다. 하지만 Java는 객체지향언어이므로 String 클래스에 메서드까지 포함한다.

String 클래스의 실제 코드

public final class String implements java.io.Serializable, Comparable {
	private char[] value;
    ...
}
  • 내용을 변경할 수 없는 불변 클래스이다.

따라서 덧셈 연산자를 이용한 문자열 결합은 성능이 떨어진다.
문자열의 결합이나 변경이 잦다면, 내용을 변경할 수 있는 StringBuffer를 사용

문자열의 비교

문자열은 변경이 불가능 하기 때문에 여러 참조변수가 참조해도 상관이 없다.
그래서 String str = "abc"; 방식을 더 많이 사용한다.

문자열 리터럴

  • 문자열 리터럴은 프로그램 실행 시 자동으로 생성된다. (constant pool에 저장)
  • 같은 내용의 문자열 리터럴은 하나만 만들어진다.

빈 문자열("", empty string)

  • 내용이 없는 문자열. 길이가 0인 char형 배열을 저장하는 것과 같음
    String str = "";
  • 길이가 0인 배열을 생성하는 것은 어느 타입이나 가능하다.

char[] chArr = new char[0];
int[] iArr = {};

  • 문자와 문자열의 초기화
    왼쪽보다 오른쪽을 권장한다.

String str1 = "";
String str2 = "";
String str3 = "";

vs

String str4 = new String("");
String str5 = new String("");
String str6 = new String("");

이 경우에도 전자가 더 메모리를 절약할 수 있다.

String 클래스의 생성자





true + "" 보다 valueOf(true)가 더 성능이 좋다.

다만 우선적으로 가독성을 생각하고 성능을 높일 필요가 있다면 수정하는 것이 좋다.

join()과 StringJoiner

  • join()은 여러 문자열 사이에 구분자를 넣어서 결합한다.
String animals = "dog, cat, bear";
String[] arr = animals.split(",");
String str = String.join("-", arr);
System.out.println(str); // dog-cat-bear

문자열과 기본형 간의 변환

profile
매일 1퍼센트씩 나아지기 ୧(﹒︠ ̫ ̫̊ ̫﹒︡)୨

0개의 댓글