문자열 표현
String 이름 = new String("값");ex>
String s1 = new String("김상헌");
String s2 = new String("김상헌");
if( s1 == s2 ) {
System.out.println("s1 == s2");
} else {
System.out.println("s1 != s2");
}
s1 == s2 의 비교는 객체의 주소값을 비교하는 것이기 때문에 결과는 같지 않다고 나온다.
상수 문자열 표현
'가' => 내부적으로 가 라는 문자의 유니코드 값으 리턴"홍길동" => 내부적으로 홍길동 문자열을 가진 인스턴스를 생성
상수 문자열은 Heap이 아닌 Constant Pool 영역에 인스턴스를 만든다.
상수풀은 같은 값을 갖는 인스턴스를 만들지 않는다.
String 이름 = "값";
ex>
String s3 = "김상헌";
String s4 = "김상헌";
if( s3 == s4 ) {
System.out.println("s3 == s4");
} else {
System.out.println("s3 != s4");
}
s3는 상수풀(Constant Pool)에 새로운 인스턴스를 만든다.
s4는 상수풀(Constant Pool)에 기존에 만들어져 있던 인스턴스의 주소를 리턴한다.
intern()
Heap에 만든 String을 상수풀에도 만드는 방법String객체.intern();
ex>
String s5 = new String ("김상헌");
String s6 = s5.intern();
if( s5 == s6 ) {
System.out.println("s5 == s6");
} else {
System.out.println("s5 != s6");
}
if( s3 == s6 ) {
System.out.println("s3 == s6");
} else {
System.out.println("s3 != s6");
}
s5는 Heap영역에 생성되고, s6는 s5와 같은 값을 상수풀에 만든다.
댓글 없음:
댓글 쓰기