String 클래스, 문자열 비교, 빈 문자열

0

String 클래스

: 데이터(char[], 문자 배열) + 메소드(문자열 관련)

  • 문자열을 다루기 위한 클래스
  • 내용을 변경할 수 없는 불변(immutable) 클래스
  • 덧셈 연산자(+)를 이용한 문자열 결합은 성능이 떨어짐.(문자열은 내용을 변경할 수가 없어서 계속 새로운 객체가 만들어지기 때문)
    ↳ 문자열의 결합이나 변경이 잦다면, 내용을 변경가능한 StringBuffer 클래스를 사용

문자열 비교

  • String str = "abc";String str = new String("abc");의 비교
  • str1과 str2는 같은 문자열 리터럴을 공유(내용 변경 불가 → 여러 참조변수가 공유해도 문제 없음)
  • str3, str4는 각각의 문자열을 가리킴
  • 문자열을 비교할 때는 == (주소비교)가 아닌 strN1.equals(strN2)(내용비교) 이용

문자열 리터럴

  • 프로그램 실행시 자동으로 생성된다. (constant pool에 저장)
String s1 = "aaa"; // new String("aaa") 처럼 new 안붙여도 자동으로 생성됨
  • 같은 내용의 문자열 리터럴은 하나만 만들어진다.
    (내용 불변이기 때문에 여러 참조변수가 하나의 String객체를 공유해도 문제 없음)

빈 문자열("", empty string)

  • 내용이 없는 문자열. 크기가 0인 char형 배열을 저장하는 문자열
String str = ""; // str을 빈 문자열로 초기화
  • 길이가 0인 배열을 생성하는 것은 어느 타입이나 가능
char[] chArr = new char[0]; // 길이가 0인 char배열
int[] iArr = {}; // 길이가 0인 int배열
  • 문자(char)와 문자열(String)의 초기화

    ↳ 빈 문자열, 공백으로 초기화

    ↳ 오른쪽 코드는, new 연산자를 썼기때문에 계속 빈 배열이 만들어짐.
    빈 배열이라도 메모리를 조금이라도 차지하게 됨. 안좋은 코드! 왼쪽(객체 1개 공유)처럼 쓰자.

출처

  • 자바의 정석 기초편 : ch9- 7~10
profile
백엔드를 공부하고 있습니다.

0개의 댓글