You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

这段Java代码为何出现编译错误?预期输出为50

为什么这段Java代码会出现编译错误?

先看你给出的代码:

public class Main {
    public static void main(String[] args) {
        short x = 10;
        x = x * 5;
        System.out.print(x);
    }
}

你预期输出50但触发编译错误,核心原因是Java和C的整数运算类型规则存在差异:

  • Java的类型提升规则:当对short、byte、char这类小整数类型做算术运算时,变量会被自动提升为int类型进行计算。所以x * 5的结果是int类型,而把int值直接赋值给short变量属于窄化转换——Java默认禁止这种隐式转换,因为它可能导致精度丢失(比如如果计算结果超出short的取值范围),因此编译器直接报错。
  • C的处理逻辑:C允许这种隐式窄化转换,只要计算结果在目标类型的取值范围内,编译器就会自动完成转换,不会报错。

解决这个问题有两种简单方式:

  1. 显式强制类型转换,明确告诉编译器你确认不会有精度问题:
x = (short)(x * 5);
  1. 直接将x声明为int类型,从根源避免类型转换问题:
int x = 10;
x = x * 5;

内容的提问来源于stack exchange,提问作者sai praveen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 08:37:11