-
[JAVA] Implicit Narrowing ConversionJava 2020. 2. 24. 20:47
승철이가 갑자기 자바 공부하다가
자바에서 정수리터럴은 int 취급이고 && 다운캐스팅이 허용되지 않는데 어떻게
byte a = -127;
이게 implicit하게 다운캐스팅되어서 정상작동하는지
(정수리터럴은 int고 변수 a는 byte 타입이니까 다운캐스팅이라고 생각함)
그리고 왜
byte a = 128;
이건 안 되는지
그렇다면 무슨 일관된 규칙이 있는지 물어보길래 찾아보다가 알게됨
결론 : 자바 만들 때 어떤 경우에는 implicit downcasting(java docs에 있는 narrowing conversion이 공식 표현인듯)을 허용해주기로 정함
Assignment conversion occurs when the value of an expression is assigned (§15.26) to a variable: the type of the expression must be converted to the type of the variable.
...
In addition, if the expression is a constant expression (§15.28) of type byte, short, char, or int:
-
A narrowing primitive conversion may be used if the type of the variable is byte, short, or char, and the value of the constant expression is representable in the type of the variable.
-
A narrowing primitive conversion followed by a boxing conversion may be used if the type of the variable is:
-
Byte and the value of the constant expression is representable in the type byte
-
Short and the value of the constant expression is representable in the type short.
-
Character and the value of the constant expression is representable in the type char.
-
출처1 : https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.2
오랜만에 acm 같이 준비하면서 하루종일 같은 고민했을 때 생각나서 좋았다
'Java' 카테고리의 다른 글
[Java] Comparable vs Comparator (0) 2020.05.12 [Java] JVM 구조 (0) 2020.03.05 [JAVA] String -> Date / Date -> String 변환 (0) 2020.02.21 Maven / Java Web Application 디렉토리 구조 (0) 2020.02.21 Maven에서 JSTL 사용 (0) 2020.02.20 -