티스토리 뷰
동등 연산자(==)을 사용한 비교의 문제점
Integer integer1 = 100;
Integer integer2 = 100;
System.out.println(integer1 == integer2); // true
위의 코드를 실행했을 때 integer1과 integer2는 동일하다고 나온다.
Integer integer1 = 1_000;
Integer integer2 = 1_000;
System.out.println(integer1 == integer2); // false
integer1, integer2 값이 4였을 때와는 달리 위의 코드는 integer1과 integer2를 비교했을 때 다르다는 결과가 출력된다. Integer 값을 동등 연산자(==)을 사용했을 때 정확하게 비교할 수 있는 값은 ~128~127까지의 범위만 가능하다.
Integer 클래스를 열어보면 내부에 IntegerCache라는 내부 클래스가 있다. 이 클래스는 -128~127까지의 범위만 autoboxing을 제공한다고 되어 있다. 캐시로 인해서 -128~127 사이의 값을 가지는 Integer는 같은 객체를 참조하는 것이다. 따라서 1000은 해당 범위를 벗어나기 때문에 다른 객체를 참조 하고 있기 때문에 false가 리턴된다.
그럼 동등 연산자(==)로 바로 Integer을 비교하는 것은 적절한 방법이 아니다.
Integer가 동등한지 비교하는 방법
Integer 비교 방법 1 - intValue 사용
intValue를 사용하면 Integer의 값을 int로 반환한다고 되어 있다.
Integer integer1 = 1_000;
Integer integer2 = 1_000;
System.out.println(integer1.intValue() == integer2.intValue()); // true
intValue 메서드는 Integer이 아니라 int를 반환한다. 이렇게 반환받은 int 값을 동등 연산자를 통해서 비교하면 된다.
Integer 비교 방법 2 - equals 사용
equals는 내부에서 intValue를 통해서 int 값을 비교하고 있다. equals를 통해서 true 혹은 false로 비교 결과를 받을 수 있다.
Integer 비교 방법 3 - compare, compareTo 사용
Integer integer1 = 1_000;
Integer integer2 = 1_000;
System.out.println(integer1.compareTo(integer2)); // 0
System.out.println(Integer.compare(integer1, integer1)); // 0
compare, compareTo 메서드를 통해서도 비교할 수 있다. (compareTo는 내부적으로 compare을 호출한다) 이 메서드들을 사용하면 boolean 값이 아니라 -1, 0, 1 값을 반환한다. 비교하는 대상이 자기보다 크면 -1, 같다면 0, 그외의 경우(비교 대상이 자기보다 큰 경우)에는 1을 반환한다.
참고
- Total
- Today
- Yesterday
- 확장 함수
- Kotlin In Action
- squash merge
- pm.expect
- Squash and merge
- DGS Framework
- graphql
- mysql
- java
- 2차 인터뷰
- postman
- solidity
- github
- 네이버 2022 공채
- 코틀린
- string
- Kotlin
- pm.test
- Python
- downTo
- 1차 인터뷰
- postman collection
- postman tests
- 주생성자
- go 특징
- python3
- 코딩테스트
- git
- hashcode
- Basic Type
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |