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 |