"整数太大"对于一个小的编译时间常数

时间:2016-02-03 12:07:14

标签: java integer

我有这个:

switch (account){
    case 08120:
        // Savings deposit interest rate
        return null;                
    case 13100:
        // Receivables contractual interest
        return null;                
    case 16550:
       // Default management process accounts payable
       return null;                                
}

但编译器抱怨整数08120太大了!

到底是怎么回事?

4 个答案:

答案 0 :(得分:15)

首先要做的事情是:不太可能你偶然发现了一个Java错误。首先责怪你的代码。

08120是Java中的八进制文字,因为它以前导零开头。

8不是有效的八进制数字(只有0到7)。

因此,您会收到编译错误,尽管有点误导。

答案 1 :(得分:2)

这不是java bug。

您不能将 0XXXXX 的格式用于十进制数字。十进制数应以非零数字开头。

使用 8120 代替 08120

答案 2 :(得分:1)

0开头的数字被解释为八进制数,8也不适合,因为有效的八进制数字可以是0到7.这不是错误,尝试在没有{的情况下开始你的数字{1}}。

答案 3 :(得分:1)

这是一个有点误导/含糊的错误信息。在您的代码中:

case 08120:
    // Savings deposit interest rate
    return null; 

您使用了08120,它被解释为八进制文字而不是十进制一个。由于您的下一个数字是8(不在0 - 7之间),因此它是无效/超出范围的八进制字面值,因此编译错误。