下划线会改变整数的行为吗?

Bas*_*wub 5 java

为什么这个代码

int[] a = {
    0,
    1,
    1_0,
    0_1,
    1_0_0,
    0_1_0,
    0_0_1
};

System.out.println(Arrays.toString(a));
Run Code Online (Sandbox Code Playgroud)

产出这个输出[0, 1, 10, 1, 100, 8, 1]

为什么输出中有8?下划线是否添加了一些秘密功能?

mhl*_*hlz 4

代码中以“0”开头的整数将使用八进制系统而不是十进制系统进行解释。

所以八进制的 010 相当于十进制的 8。

你的 0_1 和 0_0_1 也可以这样解释,但你看不到它,因为它们在所有数字系统中都代表 1。

Java 编译器理解的其他数字系统是带有前缀“0x”的十六进制(因此 0x10 相当于十进制中的 16)和带有前缀“0b”的二进制(因此 0b10 相当于十进制中的 2)。