我对shortJava中的原始类型有疑问。我正在使用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):注意编译器添加的强制转换。