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