CHAPTER 9

2019. 1. 29. 19:54

1.1 Object 클래스


1.2 String 클래스

1.2.1 변경 불가능한 클래스

String a = "a";    (주소값 : 0x100)

String b = "b";    (주소값 : 0x200)

a = a+b;            (주소값 : 0x300) -> 새로운 주소값으로 변경 -> 메모리공간차지하므로 비효율적


위와 같은 케이스의 경우 StringBuffer클래스의 append 메서드를 이용하는게 효율적!


1.2.2 문자열 비교


public class StringEx1 {
	public static void main(String[] args) {
		String str1 = "abc";			// 문자열 리터럴
	        String str2 = "abc";			// 문자열 리터럴
	        String str3 = new String("abc");
	        String str4 = new String("abc");

		if(str1==str2)
			System.out.println("1");
		if(str1.equals(str2))		
			System.out.println("2");
		if(str3==str4)		
			System.out.println("3");
		if(str3.equals(str4))		
			System.out.println("4");
		if(str1==str3)		
			System.out.println("5");
		if(str1.equals(str3))		
			System.out.println("6");
	}
}


- 결과 값 : 1 2 4 6

1 : 주소값 같음

2 : 문자열 같음

3 : 주소값 다름

4 : 문자열 같음

5 : 주소값 다름

6 : 문자열 같음


- String 클래스에서 

equals는 주소값 비교가 아닌 문자열 리터럴 비교 

등가 연산자('==')는 주소값 비교


※ 참고사항 : 문자열리터럴은 동일한 주소를 가지며, 클래스가 로드될 때 JVM의 상수 풀(constant pool) 메모리 영역에 올라간다.


'자바의정석' 카테고리의 다른 글

CHAPTER 11  (0) 2019.01.31
CHAPTER5~CHAPTER7  (0) 2019.01.21

+ Recent posts