인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

ghuhan18님의 프로필 이미지

작성한 질문수

김영한의 실전 자바 - 기본편

캐스팅 관련 질문

작성

·

138

·

수정됨

0

암묵적 캐스팅 관련 질문이 있습니다.

 

int x = 10 ;

x /= 2.5 ;

는 왜 오류를 일으키지 않나요?

 

사실 int x = 10 / 2.5 ; 랑 다를바가 없어보이는데, 전자는 오류가 발생 안하고 후자는 type 오류가 발생하는 것 같아서요

답변 1

1

OMG님의 프로필 이미지

안녕하세요. ghuhan18님, 공식 서포터즈 OMG입니다.

자바에서 두번째 케이스와 같이 다른 타입의 primitive 데이터를 직접 할당하는 것은 불가능 하지만,

첫번째 케이스의 경우 내부적으로 형변환이 되어 문제가 발생하지 않습니다.

감사합니다.

ghuhan18님의 프로필 이미지
ghuhan18
질문자

+= *= /=
이러한 연산자들은 내부적인 형변환을 해주나요?

그냥 이건 이해를 하기 보다는 외우면 되는거죠??

 

int x = 0 ;

x+=2.5 ;

이것도 자바에서 실행해보니까 되는 것 같긴 하더라구요

OMG님의 프로필 이미지

+= *= /=
이러한 연산자들은 내부적인 형변환을 해주나요?

네 맞습니다 :)

그냥 이건 이해를 하기 보다는 외우면 되는거죠??

이해, 암기를 떠나 경험을 바탕으로 습득하면 되는 개념 같습니다 ^^

OMG님의 프로필 이미지

강의 내용을 조금은 벗어난 듯 하지만 내부에서 돌아가는 것도 보시면 좋을 것 같아 간략히 설명드리겠습니다.(이해가 되지 않더라도 크게 신경쓰지 않으셔도 됩니다 😀)


 

image

다음과 같은 코드를 기계가 이해하기 위한 언어(바이트코드)로 변환된 코드를 확인하는 방법을 보여드리면,인텔리제이에서 shift를 두번 빠르게 눌러서 byteCode를 검색하여 위에 표기된 Show Bytecode를 선택하여 바이트 코드를 볼 수 있습니다.

image여기서 I2D가 형변환하는 명령어입니다.

 

참고)

https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.10.1.9.i2d

 

image

ghuhan18님의 프로필 이미지

작성한 질문수

질문하기