String class

 

✔ string class - 문자열을 다루기 위한 클래스

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

: 내용을 변경할 수 없는 불변(immutable) 클래스

 

String a = "a";

String b = "b";

a = a+b; //ab  라는 완전히 새로운 객체가 만들어진 다음에 주소값이 a에 들어감.

👉 문자열 결합이 일어날때마다 새로운 객체가 만들어짐.

 

: 덧셈연산자 (+)를 이용한 문자열 결합은 성능이 떨어짐

: 문자열 결합이나 변경이 잦다면, 내용을 변경가능한 StringBuffer을 사용

 

 


 

문자열의 비교

 

✔ String str = "abc" 와 String str = new String("abc")의 비교

String str1= "abc";	// 문자열 리터럴 "abc"의 주소가 str1에 저장됨
String str2= "abc";	// 문자열 리터럴 "abc"의 주소가 str2에 저장됨

// str1 (0x100) == str2(0x100) > 주소값이 같음. 문자열 abc를 둘다 가리킴
// true
// 하나의 문자열을 여러 참조변수가 공유. 어차피 내용을 못바꾸므로 여러 참조변수가 공유해도됨

str1==str2 //true
str1.equals(str2) // true
----------------------------------------------------------------

String str3 = new String("abc");	// 새로운 String 인스턴스 생성
String str4 = new String("abc");	// 새로운 String 인스턴스 생성

// str3(0x200)==str4(0x300)
// 각각의 객체를 생성해서 가리키고 있으므로 주소값이 다름
// false
// new 연산자로 인해 항상 새로운 문자열이 만들어짐. 같은 값이 있을 경우 비효율적이됨

str3==str4 // false
str3.equals(str4) // true

 


 

문자열 리터럴

: 문자열 리터럴은 프로그램 실행시 자동으로 생성된다 (constant pool: 상수저장소 에 자동으로 저장)

: 같은 내용의 문자열 리터럴은 하나만 만들어진다. 여러참조변수가 동시에 공유.

 


 

빈 문자열 (" " , empty String)

: 내용이 없는 문자열. 크기가 0인 char인 배열을 저장하는 문자열.

: 숫자를 문자로 변경할때나 초기화에 주로 사용됨

String str = " " ; // str을 빈 문자열로 초기화

 

: 크기가 0인 배열을 생성하는 것은 어느 타입이나 가능.

 char [ ] chArr = new char [0]; // 길이가 0인 char 배열

int [ ] iArr = { }; // 길이가 0인 int 배열. 크기는 4byte*0(길이) = 0

 

✔ 문자(char)와 문자열(String)의 초기화

string s = null; // 기본값 👉 string s = " "; // 초기화

char c = '\0000'; // 기본값  👉 char c = ' ' ; // 초기화

 

+ Recent posts