int를 Integer로 형변환하는 것을 boxing conversation 이라고 합니다. 이 때는 Integer.parseInt 매소드를 이용합니다.
https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html#valueOf-int- 를 보면 다음과 같은 문구가 있습니다:
This method will always cache values in the range -128 to 127, inclusive
이 범위에 들어가는 값인 경우 valueOf 가 항상 같은 객체를 반환하기 때문에 == 연산자로도 true를 받습니다.
하지만, 이는 비록 API 문서에 명시되어 있다고 해도 내부 상세 구현에 가까운 사항이고, Integer 객체를 == 로 비교하는 것은 항상 언제나 무조건 잘못된 방법이라고 생각해야 합니다.
lumyjuwon 5년 전
ArrayList<Integer>에 element로 2013, 2014, 2014를 순서대로 넣은 후
if(List.get(1) == List.get(2)) {
System.out.println("성공")
}
이런 식으로 코딩했을 때 List.get(1)과 List.get(2) 값이 같아 "성공"이라는 내용이 출력돼야 하는데 출력 내용이 없더라고요
그래서
if(List.get(1).equals(List.get(2)){
System.out.println("성공")
}
이런식으로 바꿔서 실행해봤는데 ==가 아닌 .equals를 이용했을 때 "성공"이 출력 되더군요
그런데 또 ArrayList element 1, 2, 2를 순서대로 넣은 후
if(List.get(1) == List.get(2)){
System.out.println("성공)"
}
이렇게 조건문을 돌릴 경우 "성공"이 출력 되더라고요 ..
제 생각엔 Integer가 127 이하 까지는 ==, .equals로 비교를 할 수 있는데 128 이상일 경우 .equals로만 비교할 수 있는거 같습니다.
이런건 왜 그런지 설명해주실 분 계신가요 ?