在Java中,如果我们将
我的问题是——为什么
请考虑以下代码示例:
byte
、short
或int
相除,总是会得到一个int
。如果操作数中有一个是long
,则结果为long
。我的问题是——为什么
byte
或short
的除法结果不是byte
或short
,而总是int
?我问的是Java语言中这种设计决策的技术原理,而不是“因为JLS这样规定”。请考虑以下代码示例:
byte byteA = 127;
byte byteB = -128;
short shortA = 32767;
short shortB = -32768;
int intA = 2147483647;
int intB = - -2147483648;
long longA = 9223372036854775807L;
long longB = -9223372036854775808L;
int byteAByteB = byteA/byteB;
int byteAShortB = byteA/shortB;
int byteAIntB = byteA/intB;
long byteALongB = byteA/longB;
int shortAByteB = shortA/byteB;
int shortAShortB = shortA/shortB;
int shortAIntB = shortA/intB;
long shortALongB = shortA/longB;
int intAByteB = intA/byteB;
int intAShortB = intA/shortB;
int intAIntB = intA/intB;
long intALongB = intA/longB;
long longAByteB = longA/byteB;
long longAShortB = longA/shortB;
long longAIntB = longA/intB;
long longALongB = longA/longB;
byteA
除以byteB
的结果必定是一个字节,难道不是吗?那么为什么byteAByteB
必须是一个int
?为什么shortALongB
不能是short
呢?intALongB
必须是long
吗?结果总是适合int
,不是吗?更新:正如@Eran指出的那样,(byte)-128/(byte)-1
的结果是128
,而这个值无法放入一个byte
中。但是为什么不是short
呢?更新2:接下来,正如@Eran再次指出的那样,(int) -2147483648 / (int) -1
也不适合int
,但结果仍然是int
,而不是long
。