자바의 정석 9장 (24일차) - String 클래스

728x90

String 클래스

String클래스는 각각의 메모리를 할당하여 immortable, 즉 내용을 변경할 수 없는 불변 결과값을 출력해준다.

따라서 String연산은 서로 다른 메모리의 값을 합쳐서 새로운 메모리에 할당해주기 때문에 연산의 효율이 떨어진다.

 

문자의 결합이나 연산이 잦다면 StringBuffer나 StringBuilder를 활용해야 효율이 좋다.

 

String으로 데이터를 할당하면 서로의 메모리를 공유하여 비교연산자를 써도 true가 나오지만 아래처럼 new로 새로 할당해준 경우는 false가 도출된다.

따라서 값을 비교하는 경우는 반드시 equals를 사용할 것

		String str = "123";
		String str1 = "123";
		System.out.println(str == str1); //true
//		123이라는 값이 할당되어있는 메모리를 공유함
//		불변의 클래스이기때문에 값을 공유해도 괜찮음
		
		String str2 = new String("456");
//		서로 다른 메모리값
		String str3 = new String("456");
//		서로 다른 메모리값
		System.out.println(str2 == str3); // false

문자열 리터럴(상수)

프로그램 실행 시 자동으로 생성되고 같은 내용의 문자열 리터럴(상수, constant)은 값을 공유한다.

*프로그램 실행 시 constant pool이 생성되고 이 pool이 생성된 String값을 보관하면서 다른 변수가 값을 공유받을 수 있게 도와준다.

728x90