java 为什么在这个代码段中出现编译错误?[副本]

3qpi33ja  于 2023-08-01  发布在  Java
关注(0)|答案(1)|浏览(147)

此问题在此处已有答案

Why is the resulting type of a division of short integers in Java not a short integer?(3个答案)
昨天关门了。

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

字符串
我希望输出为50。为什么显示编译错误?在C编程中,表达式x = x * 5将在内部转换为整数,对吗?所以我希望在Java中也是这样。

1l5u6lss

1l5u6lss1#

考虑以下情况:

byte b = 120;
short s = 10;

字符串
以上是允许的,因为编译器认识到所分配的值在目标类型的正值范围内(字节为7位,简称为15位)。
但是,当执行类似s = s + 10;的操作时,右侧会被评估为int,因此无法在不进行转换的情况下重新分配为short。s = (short)(s + 10)的值。
但是s += 10;是允许的,因为它是一个赋值操作,因此不需要强制转换。
请查阅Java语言规范中的Numeric Contexts以获取此信息和其他相关信息。

相关问题