首页 > 解决方案 > Java自动类型提升

问题描述

当我写short a = 2 * 3;的时候,我没有遇到任何问题,但是当我写的时候

short a = 2;
a = a * 3;

然后它显示类型转换错误。

我不明白这种行为,我知道每当我们执行任何表达式时,所有操作数都会转换为 int,所以根据这个逻辑,我也应该得到前一个错误。

请问这个逻辑可以解释吗?

标签: java

解决方案


有人肯定会在这里引用JLS,但用简单的英语:

short a = 2 * 3;

编译器“将看到”2 * 3实际上是立即6的(这是一个int并且适合那个short)。就像这样做:

short a = (short) 2 * 3;

另一种情况:

a = a * 3;

可以说那6也是 - 编译器不能。它认为a * 3int不知道它是否适合a,因此它发出错误。


推荐阅读