java - Java自动类型提升
问题描述
当我写short a = 2 * 3;
的时候,我没有遇到任何问题,但是当我写的时候
short a = 2;
a = a * 3;
然后它显示类型转换错误。
我不明白这种行为,我知道每当我们执行任何表达式时,所有操作数都会转换为 int,所以根据这个逻辑,我也应该得到前一个错误。
请问这个逻辑可以解释吗?
解决方案
有人肯定会在这里引用JLS
,但用简单的英语:
short a = 2 * 3;
编译器“将看到”2 * 3
实际上是立即6
的(这是一个int
并且适合那个short
)。就像这样做:
short a = (short) 2 * 3;
另一种情况:
a = a * 3;
你可以说那6
也是 - 编译器不能。它认为a * 3
它int
不知道它是否适合a
,因此它发出错误。
推荐阅读
- django - Django 限制用户编辑不属于他们的数据
- python - 子进程中带有变量的命令行
- javascript - 通过 Javascript 从对象中搜索数据
- python - 使用 Python 将 API 请求添加到一个 JSON 中
- python - 用最大值替换矩阵元素以对称矩阵
- node.js - Nodejs 生成标准输出作为 api 响应
- visual-studio-2013 - Visual Studio 2013 - 设计视图与运行时不匹配
- c# - 拖放不执行appium
- reactjs - RTL中的`container`和`container.firstChild`有什么区别
- macos - 虚拟机“vagrant”在启动期间意外终止,退出代码为 1 (0x1)