Java 按以下方式提供值时出错

Java 按以下方式提供值时出错,java,short,Java,Short,我在以下行中遇到错误“类型不匹配:无法从int转换为short” 但不是在 a=9; 为什么会这样。在数字前使用0表示它是八进制。您只能在00到07之间使用它,因此无法进行转换(它也不适用于int,因为它超出范围,即使看起来它试图进行隐式转换) 09从计算角度来说,它只是一个不存在的数字。具体地回答您的问题,这是编译器的一个特性。一个不同的编译器(可能只是一个不同的版本)会给你一个稍微不那么混乱的错误,比如整数太大:09,而不是在转换时绊倒,在你的情况下,这甚至是不可能的,因为这个数是无效的

我在以下行中遇到错误“类型不匹配:无法从int转换为short”

但不是在

a=9;

为什么会这样。

在数字前使用0表示它是八进制。您只能在00到07之间使用它,因此无法进行转换(它也不适用于int,因为它超出范围,即使看起来它试图进行隐式转换)


09从计算角度来说,它只是一个不存在的数字。

具体地回答您的问题,这是编译器的一个特性。一个不同的编译器(可能只是一个不同的版本)会给你一个稍微不那么混乱的错误,比如整数太大:09,而不是在转换时绊倒,在你的情况下,这甚至是不可能的,因为这个数是无效的

代码中的问题是,您试图用八进制表示法定义一个整数(在本例中是一个短整数),因为数字的开头是一个前导0。八进制表示法中,数字只能在0和7之间。所以写为09的八进制数不存在


因此,这两种情况结合在一起会让编译器有点困惑。

short只有2个字节长,也许这就是给您带来问题的原因,再加上09!=9如果你把0放在一个数字之前,它通常意味着八进制符号。那么07在十进制中仍然表示7,但例如010在十进制中表示8。所以,千万不要把零放在任何数字之前,以使它在任何语言的代码中更漂亮。你看到了吗?
a=9;