2016-09-01 1 views
0

OCA 시험을 위해 공부하면서 "왜이게 받아 들일 수 있니?"짧은 및 바이트 프리미티브 및 컴파일을 사용한 산술

컴파일러에서는 허용되지 않습니다.

short shortX = 1; 
short shortY = 1; 
short shortZ = shortX + shortY; //Compiler error 

비록 이것입니다.

short shortZ = (short)1 + (short)1; 

나에게는 둘 다 똑같은 것처럼 보입니다. 제 이론은 shortX와 shortY는 짧은 변수에 저장된 int로 정의 된 리터럴입니다. 반면 캐스팅은 리터럴이 짧고 허용 할 수 있도록 컴파일러에 직접 알려줍니다.

방정식 결과가 캐스팅되었지만 리터럴이 아니라는 것을 이해할 수 있습니다. 누군가 내 내면의 호기심을 진정시키기위한 명확한 설명이 있습니까?

+2

[이 답변보기] (http://stackoverflow.com/a/2294977) : "짧은 또는 리터럴 바이트가 필요한 경우 캐스팅해야합니다." – beatngu13

+0

완벽한, 감사합니다! –

+0

Note :'shortX'와'shortY'를'final'로 만들면 컴파일러의 상수 인라이닝이'short' 타입에 맞는 값을 결정할 수 있기 때문에 컴파일됩니다. –

답변

0

여기서 변수의 직접 산술 합계는 정수가됩니다. 왜냐하면 변수 할당이 런타임에 수행되므로 컴파일러가 짧은 길이에 맞을 것이므로 100 % 확신 할 수 없기 때문입니다. 변수 때문에 첫 번째 경우 컴파일 오류가 발생합니다. 두 번째 경우에는 고정 된 것과 같은 범위의 변수를 사용하고 있으므로 캐스팅하지 않아도 잘 작동합니다.