我在以下行中遇到错误“类型不匹配:无法从 int 转换为 short”
short a;
a=09;
但不在
a=9;
为什么会这样。
在数字前使用0表示它是八进制数。您只能从00 到 07使用它,因此您无法进行转换(它也不适用于 int,因为它超出了范围,即使它看起来像是在尝试进行隐式转换)。
从计算上讲, 09只是一个不存在的数字。
要具体回答您的问题,这是编译器的特性。一个不同的编译器(可能只是一个不同的版本)会给你一个不那么令人困惑的错误,比如整数太大:09而不是在强制转换时跳闸,在你的情况下这甚至是不可能的,因为数字是无效的。
您的代码中的问题是您试图以八进制表示法定义一个整数(或在您的情况下是一个短整数),因为您以前导 0 开头的数字。在八进制表示法中,数字只能在 0 和 7 之间。所以写成 09 的八进制数是不存在的。
所以这两件事结合起来有点让你的编译器感到困惑。