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 |