如何在java中声明数组为类型long



我正在尝试执行以下代码:

long n = in.nextLong();
long k = in.nextLong();
long[][] arr = new long[n][2];

但是is编译器显示了这个错误-

Main.java:9: error: incompatible types: possible lossy conversion from long to int

long[][] arr = new long[n][2];

有人能解释为什么会发生这种情况吗?

new long[n][2]中,n2都是数组维度大小,因此它们的类型应该是int,而不是long。即使数组本身包含long值。

将第一行代码更改为

int n = in.nextInt();

您得到的错误是因为您试图将long用作整数。数组的索引总是整数。Java阻止您从long转换为int,因为您要删除32位信息。

数组使用整数作为索引。因此,为了用作索引,long被转换为int。因此,错误显示为您可能输入了比int所能容纳的更大的值,这在转换为int时会导致信息丢失。

Main.java:9: error: incompatible types: possible lossy conversion from long to int

此外,由于您无法创建一个足够大的数组,使其超出int的范围来对其进行索引,因此选择int作为对数组进行索引的数据类型。

数组索引始终为int,并且您正试图将long分配给索引,因此出现错误,long有8个字节,而int有4个字节,因此如果您尝试将long转换为int,则可能会丢失精度,编译器不允许这样做。默认情况下,任何数字值在java中都被视为int,使用int值作为数组索引,在代码中简单的类型转换应该可以尝试

long[][] arr= new long [(int)n][2];

最新更新