Computer language/JAVA
JAVA) String과 주소값
surhommejk
2018. 2. 8. 12:39
String 에서 기본 변수에 추가로 String을 붙이는 경우에 주소값이 계속 바뀐다.
예를 들어,
String str = "가"; // 주소값이 0xAA 라고 한다면
str += "나"; // 여기서 주소값은 0xAA에 "나"가 붙는 것이 아니고
// 아예 새로운 주소 0xBB에 "가나"를 할당한다
str += "다"; // 여기서도 마찬가지로 0xBB에서 "다"를 붙이지 않고
// 새로운 주소 0xCC에 "가나다"를 할당한다
str = "가"; // 여기서 다시 "가"를 할당할 경우 새로운 주소를 만드는 것이 아니고
// 기존에 힙에 올렸던 0xAA가("가"가 할당 되어있는) str에 담기게 된다
하지만 new를 이용해서 String 객체를 생성하게 되면 기존의 주소를 사용하지 않는다
여기서 '=='비교와 'String.equals("~")'의 차이도 숙지하도록 한다
public class Ex05_String_Class {
public static void main(String[] args) {
String str1 = "AAA";
String str2 = "AAA";
System.out.println("1) " + (str1 == str2)); // 주소값 비교
System.out.println("2) " + str1.equals(str2)); // 주소 타고 들어가서 내용 비교
// String 비교 (주소안에 있는 값을 비교)
System.out.println();
System.out.println();
String str3 = new String("BBB"); // new를 통해 다른 메모리에
String str4 = new String("BBB");
System.out.println("1) " + (str3 == str4)); // 주소값 비교
System.out.println("2) " + str3.equals(str4)); // 주소 타고 들어가서 내용 비교
}
}
cf. Q) 이 클래스를 실행시켰을 때 Heap 영역에 String class 는 총 몇 개 인가?
정답) 3개
<결과값>
1) true
2) true
1) false
2) true