繁体   English   中英

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 中 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读为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 的最大值。 所以它不能接受长数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM