我正在尝试执行以下代码:
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]
中,n
和2
都是数组维度大小,因此它们的类型应该是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];