[JAVA] 참조형 변수(Reference Type) 비교하기 ("==" vs equals())(Feat. Cache, Integer, Long)
반응형
자바에는 자료형이 기본형과 참조형으로 나눈다.
쉽게 말하자면 int는 기본형이고 Integer는 참조형이다.
둘은 똑같이 int범위 내의 정수를 담아내는 변수이다.
그러나 int는 그냥 우리가 아는 숫자 변수이고, Integer는 Object를 상속받은, 즉 객체이다.
여기서 문제가 발생한다.
참조형은 -128 ~ 127 범위 내에서는 cache를 한다.
쉽게 설명하자면 아래와 같다.
Integer x = 127;
Integer y = 127;
System.out.println(x == y); //true
x = 128;
y = 128;
System.out.println(x == y); //false
이런 대참사가 발생해버린다. 그렇기 때문에 참조형 변수를 썼다면 '=='는 지향하는 것이 좋다.
여느 객체들과 같이(String 등) equals를 사용해주면 모든 수를 비교할 수 있다.
Integer x = 127;
Integer y = 127;
System.out.println(x.equals(y)); //true
x = 128;
y = 128;
System.out.println(x.equals(y)); //true
나같은 경우에는 개발을 하다가 id를 Long으로 한 걸 까먹고 long으로 한 줄 알고 그냥 '=='를 쓰고 있었고 회원번호가 127번까지는 문제없이 코드가 작동하기 때문에, 심지어는 어떤 런타임 에러 또한 나지 않았기 때문에 몰랐는데 직접 127번이 넘는 회원을 필터링해서 조회하다가 조회가 이상하게 되는 문제를 발견하고 나서야 이 문제를 인지했다...
정말 개념의, 기초의 중요성^^ 여러분을 저처럼 실수하지 마세요!
반응형
'Logs' 카테고리의 다른 글
-
[Error] org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 해결 방법2023.08.13
-
[Adsense] 애드센스 중간광고 안뜸 해결 방법 (feat. )2023.07.15
-
[React] 리액트 프로젝트 컴파일, 실행시키는 법 (feat. yarn 설치법, npm)2023.07.09
-
[Error] org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'openApiSchemaPropertyBuilder': Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [springfox.do..2023.06.30