提升意味着将较小的类型文字提升或转换为较高的类型。此提升用于评估表达式。现在我对此有疑问。当我输入这个语句时byte var1 = 56 + 10;给出答案 66。这怎么可能?根据提升规则,每个 byte、short 和 char 都会提升为 int。所以这个 56 和 10 将被提升为 int,因此答案 66 将是 int。然后这个 66 将被存储在字节类型的变量中。然而,要将某些内容从 int 存储到 byte,则需要进行强制转换。但这段代码无需强制转换即可完美运行。
2 回答
婷婷同学_
TA贡献1844条经验 获得超8个赞
与许多情况一样,这可以在Java 语言规范 § 5.2中找到:
此外,如果表达式是、、或 类型的常量表达式(第 15.28 节):
byte
short
char
int
如果变量的类型为 、 或 ,并且常量表达式的值可以用变量的类型表示,则可以使用缩小基
byte
元short
转换char
。
这意味着编译器首先扩大到int
目标类型,然后缩小到目标类型,因为 66 确实可以在目标类型(即字节)中表示。
请注意,这仅适用于常量表达式。例如,以下代码会产生编译时错误:
static int get() {
return 10;
}
public static final main(String[] args) {
byte var1 = 56 + get();
}
慕桂英4014372
TA贡献1871条经验 获得超13个赞
这没关系,因为你提供的是恒定的价值。
常量的编译时缩小意味着诸如以下的代码:
字节答案 = 42;
被允许。如果没有缩小范围,整数文字 42 具有 int 类型这一事实意味着需要强制转换为 byte:
字节答案 = (字节) 42; // 允许强制转换,但不是必需的
添加回答
举报
0/150
提交
取消