반응형
SMALL
로그를 보다가 어떤 값에 null 이 들어온 것을 보고
null 체크를 하려고 기존에 되어있던
if ( test != null || !"".equals(test) ) {
~
} else {
~
}
이런 식으로 코드를 짜서 했는데 생각대로 안되길래 하나하나 뜯어보려고
public void nullCheck() {
String test1 = null;
log.info(".equals(test1) >> " + ("".equals(test1)) );
log.info("null==test1" + (null==test1) );
String test2 = "";
log.info(".equals(test2) >> " + ("".equals(test2)) );
log.info("null==test2" + (null==test2) );
}
이와 같이 해서 실행시켜보니
.equals(test1) >> false
null==test1 >> true
.equals(test2) >> true
null==test2 >> false
이런 식으로 결과가 나왔다...
그래서 구글링을 좀 해본 결과
. equals는 Call by Value(값 비교)
== null 은 Call by Reference(주소 비교)
라서 위와 같이 차이가 난다고 합니다..
그래서 좀 확실히 알고 싶어서 다른 테스트를 더 해봤습니다.
public void nullCheck2() {
String test1 = "abc";
String test2 = new String("abc");
STring test3 = test1;
log.info("1,2 equlas >> " + ( test1.equals(test2) ) );
log.info("1,3 equlas >> " + ( test1.equals(test3) ) );
log.info("2,3 equlas >> " + ( test2.equals(test3) ) );
log.info("1,2 == >> " + (test1 == test2) );
log.info("1,3 == >> " + (test1 == test3) );
log.info("2,3 == >> " + (test2 == test3) );
}
이런 식으로 테스트 코드를 작성 후 결과를 확인해 보니
1,2 equals >> true
1,3 equlas >> true
2,3 equlas >> true
1,2 == >> false
1,3 == >> true
2,3 == >> false
셋다 값은 abc로 같아서
값 비교인 equals는 전부 true
new String("abc")로 새로운 문자열 abc를 만들어서 주소 값을 다르게 해 주니
주소 비교인 == 는 false가 나온 것을 확인할 수 있고,
대입 연산자인 = 를 이용해서 만들어준 test 3는 test 1과 값과 주소가 전부 다 같으니 true 가 출력된 것을 확인할 수 있습니다.
반응형
'Programing > JAVA' 카테고리의 다른 글
[Java] Map - getOrDefault (0) | 2024.02.02 |
---|---|
[JAVA] 나이계산 (3) | 2022.06.13 |
[java] 금액 3자리 마다 콤마(,) 찍는 방법 (4) | 2022.04.04 |
lombok getter setter 대문자 (4) | 2022.03.22 |
[java] Map을 로그에 출력하는 방법 (11) | 2022.02.11 |