我在以下行中遇到错误“类型不匹配:无法从int转换为短”
short a;
a=09;
但不是
a=9;
为什么会这样。
答案 0 :(得分:4)
在数字前使用 0 表示它是八进制。你只能在 00到07 中使用它,所以你不能进行转换(它也不适用于int,因为它超出了范围,即使看起来它试图进行隐式转换)。
09 从计算上来说,只是一个不存在的数字。
答案 1 :(得分:2)
要具体回答你的问题,那就是编译器的特殊性。一个不同的编译器(可能只是一个不同的版本)会给你一个不那么混乱的错误,例如整数过大:09 而不是在演员表上绊倒,在你的情况下甚至不可能,因为号码无效。
你的代码中的问题是你试图用八进制表示法定义一个整数(或你的情况下的一个短整数),因为你正在以前导0开始数字。八进制表示数字只能是在0到7之间。因此,不存在写为09的八进制数。
所以这两件事情让你的编译器感到困惑。