我对short
Java中的原始类型有疑问。我正在使用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类型的变量,并且编译器希望我进行强制类型转换。如果使用两个type类型的变量来执行此操作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
值。
T a, b; a += b
等效于T a, b; a = (T) (a + b)
:注意编译器添加的强制转换。