본문 바로가기
Java

[Java] 문자열 자료형 (String)

by 스응 2023. 2. 10.
728x90
728x90

String 자료형

  - 문자열을 저장하는 자료형

  - 반드시 쌍따옴표(" ")를 사용하여 값을 표기

  - 변수를 이용해 객체를 따로 생성하지 않아도 자료형을 사용할 수 있음

     (물론, 객체를 생성해서 사용할 수도 있음)

#  이스케이프 문자

  - 역슬래시(\)를 사용하여 문자열 내부에 특정 문자를 포함시킴

 

문법 기능
\t [Tab] 키만큼 띄움
\n 줄 바꿈
\" " 출력
\' ' 출력
\\ \ 출력

#  문자열의 값 비교 메서드

문자열1.equals(문자열2);

 

  - 문자열1과 문자열2의 '내용'이 완전히 동일하면 true 반환

#  문자열의 주소 값 비교 연산자

문자열1 == 문자열2;

 

  - 문자열1과 문자열2의 '주소 값'이 동일하면 true 반환

#  주소 값 확인

System.out.println(System.identityHashCode(변수));

#  char[]을 문자열로 변환

char[] charArray = { '문자1', '문자2', ... };
String str = new String(charArray);

 

String 자료형의 메모리 저장 방식

# 원래 형태

String 참조변수1 = new String("문자열");
String 참조변수2 = new String("문자열");

 

  - 해당 객체는 heap 메모리 영역에 저장됨

  - 참조변수1과 참조변수2는 주소 값이 다름 (객체들은 각자의 메모리 공간을 가짐)

  

# 간소화된 형태

String 변수1 = "문자열";
String 변수2 = "문자열";

 

  - 해당 변수는 상수 풀 영역에 메모리를 저장함

  - 변수1과 변수2에 같은 문자열을 저장하면 주소 값이 동일함

  - 문자열이 저장된 상태에서, 변수의 값을 다른 문자열로 초기화하면 주소 값이 달라짐

 

  ⇒ 상수 풀 영역에 한 번 생성된 문자열은 불변함 (Immutable)

  ⇒ 동일한 문자열을 생성한다면, 메모리 공간을 새로 생성하지 않고 기존의 문자열을 재활용함

 

  - String 클래스로 문자열을 생성하다 보면 계속해서 상수 풀 영역에서 메모리를 사용하게 됨

    → 문자열을 빈번하게 사용해야 하는 경우 or 메모리를 효율적으로 사용해야 하는 경우

         StringBuilder 클래스와 StringBuffer 클래스를 활용함

 

 

반응형
728x90

StringBuilder 자료형

  - 단일 쓰레드 프로그램에서 권장함

  - 문자열을 여러 번 연결/저장할 때 유용함

#  문자열 합치기 : append 메서드

// 객체 생성 이후
참조변수.append(추가문자열); // 기존 문자열 + 추가 문자열

#  StringBuilder 타입을 String 타입으로 형 변환하기 : toString 메서드

// toString 메서드 활용
String 변수 = 참조변수.toString();

// 문자열 연산 활용
String 변수 = 참조변수 + "문자열";

#  메모리 저장 방식

  - 변수에 저장된 문자열이 달라져도 주소 값이 동일함

      → String 클래스와 달리, 이미 만들어진 메모리 공간에 다시 접근해서 값을 변경함

          (새로운 메모리 공간 생성 X)

 

 


StringBuffer 자료형

  - 멀티 쓰레드 프로그램에서 동기화를 보장함

  - 문자열을 여러 번 연결/저장할 때 유용함 (append 메서드를 자주 사용할 때)

  - 메서드 방식은 위에 작성된 StringBuilder와 동일

 

 


 

 

320x100
반응형

'Java' 카테고리의 다른 글

[Java] 추상 클래스  (0) 2023.02.11
[Java] final 키워드  (0) 2023.02.11
[Java] 상속 관계의 다형성과 참조형 형 변환  (0) 2023.02.09
[Java] 상속 관계와 메서드 오버라이드  (0) 2023.02.09
[Java] 배열  (0) 2023.02.09

댓글