記錄

JAVA) String과 주소값 본문

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


Comments