일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 테크쇼
- OS
- modelmapper
- softeer
- JPQL
- ObjectMapper
- 인프콘2023
- proxyFactory
- Junit 5
- Test Doulbe
- MySQL
- RequestBody
- ExceptionResolver
- 일상
- backend
- Test
- Spring
- Test code
- mapstruct
- Service 계층 테스트
- FCM
- 자바
- 공룡책
- Server
- Coputer Science
- JPA
- 소프티어
- Java
- enumSet
- db
- Today
- Total
공부내용공유
Wrapper class 의 비교 연산자 본문
서론
자바로 알고리즘 문제를 풀면서 Integer , String 을 HashMap 자료구조를 사용하여 해결해야 하는 문제를 풀고 있었다.
이때 디버깅 및 간단한 실험을 위해 Integer 끼리 동등 연산자를 사용하여 비교하는 코드를 돌렸다.
내가 공부했던 wrapper class 는
Inerger a = 100 은 new Integer(100);
Integer b = 100 또한 new Inteher(100); 이므로
a==b 는 false 가 나올거라 생각했는데 True 가 나왔다.
왜 그럴까를 찾아보고 알게된 사실을 정리하였다.
본론
Integer class 를 스르륵 훓어 봤는데 수상한걸 발견했다.
해당 부분의 코드를 보고 검색을 해본 결과.
Integer class 는 -128 부터 128 까지의 정수는 새로 생성하지 않고 캐싱해둔 객체를 참조한다.
그래서 기본 설정이라는 가정하에 Integer 에 동등 연산자를 사용하면
-128 ~ 128 은 True
그 외의 숫자는 False 가 나온다.
Integer a=100;
Integer b=100;
System.out.println("a == b " + (a==b));
Integer c = 129;
Integer d = 129;
System.out.println("c == d " + (c == d));
이때 Integer 의 HashCode 와 Equals 는 값을 기준으로 객체를 비교하기 때문에 어떤 숫자라도 값이 같으면 같은 객체로 취급된다.
그래서 HashCode 를 사용하는 HashMap 과 같은 Collection은 같은 객체로 판단한다.
dic.put(c,"c");
dic.put(d,"d");
System.out.print(dic.size());
이러한 결과가 나온다.
아래 코드는 Intger class 의 hashCode 와 Equals 이다.
*Equals 와 HashCode
이렇게 Hash 기능을 사용하는 몇몇 자료구조들은 객체를 비교할때 hashCode를 만들어 비교한다.
기본 설정은 객체의 메모리 주소를 이용해 HashCode 를 만들기 때문에 만약 Equals 를 재정의 했다면 HashCode 도 그에 맞춰 재정의 해야 특정 자료구조를 사용해도 오류가 발생하지 않는다.
결론
어쩌다보니 자바의 Wrapper class 와 HashCode, Equals 에 대해 복습하게 되었다.
알고리즘 문제를 풀때뿐만 아니라 프로젝트를 진행할 때도 잘 알고 사용 해야겠다.
'Server > Java' 카테고리의 다른 글
java, kotlin에서 null 처리 (0) | 2024.03.31 |
---|---|
java hashMap 살펴보기 (feat: red black tree) (2) | 2024.03.15 |
Enum 활용하기 (feat : EnumSet, EnumMap) (0) | 2024.03.08 |
Java Deque / ArrayDeque, LinkedListDeque, ConcurrentLinkedDeque, LinkedBlockingDeque 특징 (0) | 2023.07.14 |
Java Array, List 차이, 사용법 (0) | 2023.06.28 |