我有一个关于 Java 中基本类型 short
的问题,我使用的是 JDK 1.6。
如果我有以下资料:
short a = 2;
short b = 3;
short c = a + b;
编译器不想编译——它说它“不能从 int 转换为 short”,并建议我转换为 short
,因此:
short c = (short) (a + b);
真的有用。但我的问题是,我为什么需要选角?A 和 b 的值在 short
的范围内-短值的范围是{-32,768,32767}。
当我想执行-,* ,/(我还没有检查其他的)操作时,我也需要强制转换。
如果对基元类型 int
执行相同的操作,则不需要将 aa + bb 强制转换为 int
。以下工作良好:
int aa = 2;
int bb = 3;
int cc = aa +bb;
我是在设计一个类时发现这个问题的,我需要添加两个 short 类型的变量,编译器希望我进行强制转换。如果使用 int
类型的两个变量执行此操作,则不需要强制转换。
一个小注意: 同样的事情也发生在原语类型 byte
上:
byte a = 2;
byte b = 3;
byte c = (byte) (a + b);
但这不是:
byte a = 2;
byte b = 3;
byte c = a + b;
对于 long
、 float
、 double
和 int
,不需要强制转换,只需要对 short
和 byte
值进行强制转换。