我有一个有关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 。以下内容可以正常工作:
<code><code>int aa = 2;
int bb = 3;
int cc = aa +bb;
</code></code>
在设计一个需要添加两个 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
类型的变量需要进行强制类型转换。