Long -> int 타입 변환 질문
@Test
public void findAll() {
//given
Member member1 = new Member();
member1.setName("hi");
Member member2 = new Member();
member2.setName("hello");
//when
repository.save(member1);
repository.save(member2);
List<Member> memberList = repository.findAll();
//then
assertThat(memberList.size()).isEqualTo(2);
assertThat(memberList.get((int) member1.getId())).isEqualTo(member1);
assertThat(memberList.get((int) (member1.getId() - 0))).isEqualTo(member1);
}밑에서 두 번째줄 (int) member1.getId()는 컴파일 오류가 발생하는데
맨 밑줄의 (int) (member1.getId() - 0)은 컴파일 오류가 발생하지 않는 이유가 궁금합니다.

답변 1
1
안녕하세요. matics3982님, 공식 서포터즈 OMG입니다.
오류가 발생하지 않은 케이스에 대해서 먼저 설명드리면,
member1.getId() - 0
의 연산결과의 타입은 Long타입의 래퍼클래스가 아닌 long타입이 되고 이 때 int로의 묵시적 형변환이 가능하고 컴파일 오류가 발생하지 않습니다.



반면,
(int) member1.getId()
의 경우 Long타입의 래퍼 클래스를 int의 프리미티브 타입으로 변환하려고 하기에 실패합니다. 만약 int로 변환하려면 다음과 같이 intValue()를 사용해야합니다.

감사합니다.
스프링 빈 등록 방법 2가지 다 알아야하는 이유
0
56
1
스프링 부트 버전 질문
0
135
2
인텔리제이 오류
0
112
1
..
0
168
2
Unused property.....
0
165
2
project JDK is misconfigured
0
219
2
외부 API의 ID 타입(String/UUID)과 내부 도메인의 ID 타입(Long)이 불일치할 때의 설계 정석
0
126
2
단위/통합 테스트 버전충돌 문제
0
133
2
❗️springboot 4.0.2 버전 aspectj dependency 설정❗️
0
305
1
왜 컨트롤러는 변한게 없는데 새로 만든 html 파일이 뜨나요?
0
149
2
윈도우 build test오류 질문
1
167
2
테스트 관련 공부에 대한 조언을 얻고 싶습니다
0
152
2
테스트 실행 시 에러 질문
0
400
1
name을 통한 비교와 객체를 통한 비교
0
104
1
빌드 후 libs 없음
1
193
1
윈도우 gradlew.bat 에러
0
237
1
@PostMapping("/members/new")가 동작하지 않습니다
0
122
1
java static class와 kotlin class
0
114
1
스프링 DB연결
0
183
1
소요 시간
0
120
2
ddl.sql에 빨간 밑줄
1
145
2
welcome page 에러
0
252
3
잘 모르겠습니다.
0
194
2
fail을 똑같이 쳤는데 오류가 발생해요
0
211
2





