为什么转换为 int 给我 8 而不是 0?

Why is casting to int giving me 8 instead of 0?

抱歉,如果这很简单。这让我困惑了一段时间。在以下代码中:

public class Main {
    public static void main(String[] args) {
        long a = 10000000000L;
        System.out.println(a % 10);
    }
}

我得到的输出是 0,这正是我所期望的。但是当我像这样转换为 int 时,

public class Main {
        public static void main(String[] args) {
            long a = 10000000000L;
            System.out.println((int)a % 10);
        }
}

我得到 8 作为输出而不是 0。我不明白发生了什么。为什么施法后0变成8?

发生这种情况是因为首先将 a 的值转换为 int,然后执行模块。

您想做的是:

public class Main {
        public static void main(String[] args) {
            long a = 10000000000L;
            System.out.println((int)(a % 10));
        }
}

当您将 long 转换为 int 时。而long的值超出了int(-2,147,483,648到2,147,483,647)的范围。因此,当您尝试转换它并将其存储为 int 数据类型时,JVM 会简单地将其舍入到 int 数据类型的范围内。并且将存储在 int 中的值是 141006540​​8.

现在,如果你执行 141006540​​8 % 10 = 8。

你可以试试下面的程序来验证。

public class Test {
    public static void main(String[] args) {
        long a = 10000000000L;
        int b = (int) a; 
        System.out.println(b);  // here it will print 1410065408 
        System.out.println(b % 10);  //so here it's 8
    }
}