Java 将 long 转换为 int

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中的数组大小不能超过一个int的范围,所以数组创建的大小参数隐式为一个int。将 N 更改为 int.

来自 JLS 15.10.1 Array Creation Expression(强调我的):

Each dimension expression undergoes unary numeric promotion (§5.6.1). The promoted type must be int, or a compile-time error occurs.

Java 中的数组下标和大小必须始终为 int,因此在此表达式 new long[N] 中,N 被转换为 int,并且因为longint 的范围更广,这是一个必须明确完成的缩小转换:new long[(int) N]。或者将 N 读作 intint 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 的最大值。所以它不能接受很长的数字。