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

ghuhan18님의 프로필 이미지
ghuhan18

작성한 질문수

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

캐스팅 관련 질문

작성

·

114

·

수정됨

0

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

 

int x = 10 ;

x /= 2.5 ;

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

 

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

답변 1

1

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

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

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

감사합니다.

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

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

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

 

int x = 0 ;

x+=2.5 ;

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

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

네 맞습니다 :)

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

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

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


 

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님의 프로필 이미지
ghuhan18

작성한 질문수

질문하기