[英]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.