2013년 8월 6일 화요일

[2주차 2일]문자열(String)

java에서 문자열을 class에서 별도로 관리하는데, 이 클래스를 String 이라고 한다.


문자열 표현

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와 같은 값을 상수풀에 만든다.


















         

댓글 없음:

댓글 쓰기