当我这样做时,我在 Java 中观察到:
public static void main(String[] args){
int i = 45;
int j = 045;
System.out.println("i:>>"+i);
System.out.println("j:>>"+j);
}
输出为:
i:>>45
j:>>37
为什么会发生这种情况? j
的值打印为 37
当它是45
时?
有人可以指导一下吗?提前致谢。
最佳答案
045
是八进制(基数 8
):
8^2 * 0 + 8^1 * 4 + 5 = 37
45
是十进制(基数 10
)。
尝试运行这个:
int j = 049;
System.out.println("j:>>" + j);
您将得到“int 类型的文字 049 超出范围”,因为八进制数字只能包含从 0
到 7
的数字>(这就是为什么它是基8
的原因)。
编辑:
正如 @Gleen 在评论中提到的,十六进制以 0x
开头:
int j = 0x111; // 16^2 * 1 + 16^1 * 1 + 1 = 273
System.out.println("j:>>" + j);
输出:
j:>>273
关于java - 为什么 int 会发生这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21325094/