为了账号安全,请及时绑定邮箱和手机立即绑定

java中的提升和转换

java中的提升和转换

FFIVE 2023-07-19 16:31:57
提升意味着将较小的类型文字提升或转换为较高的类型。此提升用于评估表达式。现在我对此有疑问。当我输入这个语句时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 节):byteshortcharint

  • 如果变量的类型为 、 或 ,并且常量表达式的值可以用变量的类型表示,则可以使用缩小基byteshort转换char

这意味着编译器首先扩大到int目标类型,然后缩小到目标类型,因为 66 确实可以在目标类型(即字节)中表示。


请注意,这仅适用于常量表达式。例如,以下代码会产生编译时错误:

static int get() {

    return 10;

}


public static final main(String[] args) {

    byte var1 = 56 + get();

}


查看完整回答
反对 回复 2023-07-19
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

这没关系,因为你提供的是恒定的价值。

常量的编译时缩小意味着诸如以下的代码:

字节答案 = 42;

被允许。如果没有缩小范围,整数文字 42 具有 int 类型这一事实意味着需要强制转换为 byte:

字节答案 = (字节) 42; // 允许强制转换,但不是必需的


查看完整回答
反对 回复 2023-07-19
  • 2 回答
  • 0 关注
  • 76 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信