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
,并且因为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 的最大值。所以它不能接受很长的数字。
以下代码:
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
,并且因为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 的最大值。所以它不能接受很长的数字。