[英]Java converts long to int
以下代码:
import java.util.*;
public class HelloWorld{
public static void main(String []args){
Scanner s = new Scanner(System.in);
long N = s.nextLong();
long[] arr = new long[N];
System.out.println(N);
}
}
收到此错误:
HelloWorld.java:12: error: incompatible types: possible lossy conversion from long to int long[] arr = new long[N];
据我了解代码中不涉及 int ,任何人都可以解释为什么会发生这种情况以及如何解决这个问题?
Java 中 arrays 的大小不能超过一个int
的范围,所以创建数组的 size 参数隐式是一个int
。 将N
更改为int
。
来自JLS 15.10.1 Array Creation Expression (强调我的):
每个维度表达式都经历一元数字提升(§5.6.1)。 提升的类型必须是
int
,否则会发生编译时错误。
Java 中的数组下标和大小必须始终为int
,因此在此表达式中new long[N]
将N
转换为int
,并且由于long
的范围比int
更宽,因此这是一个必须明确完成的缩小转换: new long[(int) N]
。 或者只是将N
读为int
: int N = s.nextInt()
。
long[] arr = new long[N];
在这一行中,您正在创建一个大小为 N 的数组,但 Java 中的数组大小只能是整数,这就是为什么它将 N 读取为 int,如果您的意图是创建 N 大小的数组,您应该将 N 读取为 int
int N = s.nextInt();
java 中数组的最大长度为 2,147,483,647 (2^31 - 1),这是 int 的最大长度。 因此,数组隐含地可以具有 int 的最大值。 所以它不能接受长数字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.