【发布时间】:2010-10-03 10:15:33
【问题描述】:
我对 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 值。
【问题讨论】:
-
特别烦人的是,当你有一个函数以 short 作为参数时,你想在该参数中传递一个常量给它。您必须将该常量类型转换为short。例如,将 0 传递给函数的短参数会产生错误。这是一个丑闻!
标签: java casting primitive short