본문 바로가기

Languages

왜 0 대신 Integer.valueOf(0) 을 써야할까?

Android 개발자 사이트에서 in-app billing 관련하여 예제코드를 보면 아래와 같이 int 0값을 Integer.valueOf(0)으로 넘겨주는 것을 볼 수가 있습니다.


startIntentSenderForResult(pendingIntent.getIntentSender(),

   1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0),

   Integer.valueOf(0));


실제 0과 Integer.valueOf(0)은 의미적으로는 동일하게 0입니다만, Java내부의 구현을 들어가면 0 이나 new Integer(0)은 객체를 새로 만드는 것이고, Integer.valueOf(0)는 cache된 객체를 다시 사용할 수가 있습니다. 그래서 이 값을 극도로(?) 많이 쓰게 되면 성능의 영향을 줄 수가 있다고 합니다.


실제로 이런 것 관련해서 아래의 블로그에서 조사를 하기도 했습니다.


http://tech.puredanger.com/2007/02/01/valueof/


그런데, 이렇게 쓰면 한가지 걸리는 부분이 있는데, 바로 Intellij 에서 이를 Unnecessary boxing 이라고 code analysis 에서 warning을 내게 됩니다. 왜 이렇게 써야하는지 알고 의도한 것이기에 이 경우는 warning을 없애고 싶을 겁니다.


이럴 때 아래와 같이 SuppressWarning 을 사용하면 warning 이 사라지게 됩니다.


@SuppressWarnings({"UnnecessaryBoxing"})

public void printZero() {

System.out.println(Integer.valueOf(0));

}


Intellj용 SuppressWarning list는 https://jazzy.id.au/2008/10/30/list_of_suppresswarnings_arguments.html 를 참고하세요.