为什么转换为 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
中的值是 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
}
}
抱歉,如果这很简单。这让我困惑了一段时间。在以下代码中:
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
中的值是 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
}
}