java中的提升和转换

提升意味着将较小的类型文字提升或转换为较高的类型。此提升用于评估表达式。现在我对此有疑问。当我输入这个语句时

byte var1 = 56 + 10;

给出答案 66。这怎么可能?根据提升规则,每个 byte、short 和 char 都会提升为 int。所以这个 56 和 10 将被提升为 int,因此答案 66 将是 int。然后这个 66 将被存储在字节类型的变量中。然而,要将某些内容从 int 存储到 byte,则需要进行强制转换。但这段代码无需强制转换即可完美运行。


FFIVE
浏览 101回答 2
2回答

婷婷同学_

与许多情况一样,这可以在Java 语言规范 § 5.2中找到:此外,如果表达式是、、或 类型的常量表达式(第 15.28 节):byteshortcharint如果变量的类型为 、 或 ,并且常量表达式的值可以用变量的类型表示,则可以使用缩小基byte元short转换char。这意味着编译器首先扩大到int目标类型,然后缩小到目标类型,因为 66 确实可以在目标类型(即字节)中表示。请注意,这仅适用于常量表达式。例如,以下代码会产生编译时错误:static int get() {    return 10;}public static final main(String[] args) {    byte var1 = 56 + get();}

慕桂英4014372

这没关系,因为你提供的是恒定的价值。常量的编译时缩小意味着诸如以下的代码:字节答案 = 42;被允许。如果没有缩小范围,整数文字 42 具有 int 类型这一事实意味着需要强制转换为 byte:字节答案 = (字节) 42; // 允许强制转换,但不是必需的
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java