본문 바로가기
2014년/JAVA

Use Equals To Compare Strings(★★☆)

by BroBroBro 2012. 3. 19.
sonar에서 Severity(강도)중에 Major인지 Minor인지중에 아무튼 위와같은 Warning을 보게되었다.

원래 소스:
if(param.get("code") != ""){ ... }

변경 소스:
if(!("".equals(param.get("code")))){ ... }

안내가이드를 클릭하니 다음과 같이 나온다
 
Use Equals To Compare Strings
Plugin: pmd    Key: UseEqualsToCompareStrings

Using"==" or "!="to compare strings only works if intern version is used on both sides.

PMD를 돌린후에 영어의 내용이 이해가 가면 빨리 해결할텐데 이놈의 영어가 항상...
위를 해석해보자

String를 비교하기위해 "==" 과 "!="를  사용하는것은  오직 (~)할때만 효과가 있다.
String를 비교하기위해 "==" 과 "!="를  사용하는것은  오직 (양측이 내부버젼을 사용)할때만 효과가 있다.

머리아프다 정리를 하자 저렇게 바꾸게 된경위를 ㅠㅠ

1. "=="의 사용은 객체의 내용이 아니라 참조값만 비교된다.
    여기서 내용이란? 외부에(extern)에 보여지는 값이다 예를 들어서
    String A = "abc"; 여기에서 외부값(extern version)이 "abc"인것이다
                           내부값은 intern version 이겠지 즉, A라는 Object의 참조값이겠지 "@dfhl345 " 이런거 말이다.
 
ex) java책에 보면 많이 나오는예제이다.

 String A = "abc"
 String B = "abc"
if(A==B) // 참



 String A = new String("abc")
 String B = new String("abc")
if(A==B)     //거짓
if(A.equals(B))  //참


2. 그리고 위에 변경사항을 보면  [1]param.get("code").equals("") 이렇게 안쓰고
                                          [2]"".equals(param.get("code)) 이렇게 썼다
    equals의 주최는 앞에 있다. 그래서 param.get에서 null이 나오게되면 [2]은 exception을 발생시킨다.


참고1.:
위에서 work를 작동한다 등으로 해석하지 말자~!
This pill doen't work. 이약은 효과가 없다.

'2014년 > JAVA' 카테고리의 다른 글

[checkStyle] Eclipse 적용  (0) 2013.04.23
[javadoc] javadoc 시 한글깨짐  (0) 2013.04.18
java heapdump option  (0) 2012.11.30
Static생성 순서 및 시점  (0) 2012.11.27
[jsp threw Exception] org.apache.el.parser.ParseException: Encountered  (0) 2012.11.12