문제

I have code like this

short a = 1;
short b = 2 ;
short c = a + b; // dosen't compile

What is the reason for compilation failure? x + x always produces Integer or bigger Number, but why?

도움이 되었습니까?

해결책

None of the binary operators will produce an Integer. However, it will use an int instead of shorter types, byte, short and char If the compiler can inline the value it can cast the value for your. e.g.

final short a = 1;
final short b = 2;
short c = a + b; // does compile, because of constant inlining.

The only operator which produces an Integer is a cast.

Integer i = (Integer) 1;

BTW: On oddity is that Java defines the 32-bit float as being "wider" than the 64-bit long value. This has the downside that float has much less precision. Consider this.

long l = 7777777777777777777L;
l += 0.0f;
System.out.println(l);

prints

7777777579364188160

Even though 0.0F was added to l it was implicitly cast to float (as float is wider) and then cast back (as an operator assignment was used) resulting in a error of ~20 billion.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top