如果在算术运算中,
short
被自动提升为 int
,那么为什么以下代码会出现错误:short thirty = 10 * 3;
将变量thirty
合法地赋值为short
类型?
进而,这样做:
short ten = 10;
short three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
还有这个:
int ten = 10;
int three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
此代码编译不通过,因为将一个int
值赋给short
类型需要强制类型转换。
数字文字有什么特别之处吗?
short thirty = 10 * 3;
替换为short thirty = 30;
,这是一条有效的语句。具体可以参考Java语言规范的相关章节。(我需要查找相关章节才能确定)。 - Thomas10 * 3
并用结果初始化变量。在您的错误示例中,计算发生在运行时,JVM强制转换short类型。 - Felix10
和3
都不是短整型,也没有被提升为整型,它们是字面常量。 - Matthew Read10
和3
被编译器评估为int
,这是正确的吗? - LarsHshort s = 5
和int i =10
分别被评估为short
和int
。问题出现在我们有一个 悬空常量 的情况下。如果short s = 5;
,那么short s2 = s+5
就不起作用,因为编译器认为s+5
会导致一个int
。如果s
是final
(编译时常量),那么编译器知道s+5
可以适合一个short
,因此它将被允许。 - TheLostMind