본문 바로가기

나는 엔지니어/JAVA

String 메모리 활용.

    String s1 = "JAVA";

String s2 = "Program!!";

String s3 = "KK";

String s4 = "KK";

위에서 string 데이터는 모두 전역 공간에 만들어지고

                s3 과 s4 는 같은 데이터의 주소를 가진다.

그러므로 아래에서는 출력값이 true로 표시된다.

if( s3 == s4)

{

System.out.println("true");

}

else

{

System.out.println("false");

}

               아래에서 새로운 문자열을 만들어서 반환을 하는데 아래의 경우는

              새로운 메모리 공간을 할당하여 ( 힙 메모리 영역) 반환하기 때문에

             s3 과 s4 는 서로 다른 주소값을 가진다.

s3 = s1.concat(s2);

s4 = s1.concat(s2);

아래처럼 주소값을 비교할 경우 출력밧이 false로 표시된다.

if( s3 == s4)

{

System.out.println("true");

}

else

{

System.out.println("false");

}


               위와 같은 경우 간혹 데이터 체크에 실수가 발생할 빈도가 크기때문에

               가능하면 객체의 데이터 비교는 equal메소드를 사용하던가 아니면

               equal메소드를 오버라이드해서 적절하게 이용하는 것이 버그를 사전에 예방하는데 도움이 될 것이다.



              

'나는 엔지니어 > JAVA' 카테고리의 다른 글

자바 메소드 제네릭  (0) 2012.05.30
의존성 부패란  (0) 2012.05.29
자바의 접근제한자 생략...  (0) 2012.05.29
instanceof  (0) 2012.05.29
Final 키워드  (0) 2012.05.21