Java 整数上的编译器行为不同。为什么下面的代码在一种情况下给出编译器错误?

Java 整数上的编译器行为不同。为什么下面的代码在一种情况下给出编译器错误?,java,Java,下面代码的行为是这样的。第一个声明给出编译器错误,而第二个工作正常,即使我们打印第二行的结果,它给出的输出是1270而不是02366。那么,在这种情况下,是否有任何特定的整数截断或移位 public static void main(String[] args) { int i =01339;//compiler error out of int range int j= 02366;//works fine System.out.printl

下面代码的行为是这样的。第一个声明给出编译器错误,而第二个工作正常,即使我们打印第二行的结果,它给出的输出是1270而不是02366。那么,在这种情况下,是否有任何特定的整数截断或移位

public static void main(String[] args) {

        int i =01339;//compiler error out of int range

        int j= 02366;//works fine

       System.out.println(j); //value 1270

}

以0开头的文字是八进制(以8为基数)文字,只能包含数字0到7。因此
01339
无效


02366
是2*8*8*8+3*8*8+6*8+6=1270

以0开头的文字是八进制(以8为基数)文字,只能包含数字0到7。因此
01339
无效


02366
是2*8*8*8+3*8*8+6*8+6=1270

因为在java中,当定义以0开头的数字时,它认为是以8为基数的数字,因此它转换为以10为基数的数字,并返回1270作为输出


基8的唯一可能的文字是0到7,这里输入的9超出了允许的值,因此显示错误,因为在java中,当定义以0开头的数字时,它认为是基8数字,因此它转换为基10并返回1270作为输出

基数8的唯一可能的文字是0到7,这里输入的9超出了允许的值,因此也显示了错误