java - 为什么 int 会发生这种情况?

标签 java

当我这样做时,我在 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 超出范围”,因为八进制数字只能包含从 07 的数字>(这就是为什么它是基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/

相关文章:

java - 调整框架大小时 javafx GUI 背景保持居中的问题

java - 使用 lockoninsert=false 的集群模式下的 Quartz

java - Eclipse CDT解析C/C++头文件返回空AST

java - 在一百万个元素的数组中找到唯一的唯一元素

java - 修复 Eclipse ctrl-click 与 ctrl-shift-T 搜索相同的类空间

java - 如何创建具有特定时区的日历?

java - 亚马逊现货价格历史 - Java 代码

java - 检索表时无法获取表中 0 位置的第一个元素?

在 android 中添加 google place API 时出现 java.lang.IllegalStateException

java - 使用带迭代器的 mapPartition 保存 spark RDD