很抱歉,如果这很简单。这已经使我困惑了一段时间。在以下代码中:
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?
答案 0 :(得分:3)
之所以会这样,是因为首先将a
的值强制转换为int,然后再执行该模块。
您想要做的是:
public class Main {
public static void main(String[] args) {
long a = 10000000000L;
System.out.println((int)(a % 10));
}
}
答案 1 :(得分:3)
将long
投射到int
时。并且long
的值超出了int
(-2,147,483,648到2,147,483,647)的范围。因此,当您尝试将其强制转换并存储在int
数据类型中时,JVM会将其舍入到int
数据类型范围内。并且将存储在int
中的值为 1410065408 。
现在,如果您执行1410065408%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
}
}