我正在尝试执行以下代码:
long n = in.nextLong();
long k = in.nextLong();
long[][] arr = new long[n][2];
但是编译器显示此错误-
Main.java:9: error: incompatible types: possible lossy conversion from long to int
long[][] arr = new long[n][2];
有人可以解释为什么会这样吗?
答案 0 :(得分:3)
在new long[n][2]
中,n
和2
均为数组维度大小,因此应为int
类型,而不是long
类型。即使数组本身包含long
个值。
将第一行代码更改为
int n = in.nextInt();
答案 1 :(得分:2)
您得到的错误是因为您试图使用long作为整数。数组的索引始终是整数。 Java阻止您将long信息转换为int信息,因为您要删除32位信息。
答案 2 :(得分:0)
数组使用整数作为索引。 因此将long转换为int以便用作索引。 因此,显示错误的原因是您输入的内容可能比int所能容纳的要大,而在转换为int时会导致信息丢失。
Main.java:9: error: incompatible types: possible lossy conversion from long to int
此外,由于您不能创建足够大的数组以使其超出int的范围以进行索引,因此选择int作为索引数组的数据类型。
答案 3 :(得分:0)
数组索引始终为int,因此您尝试将long分配给索引,因此错误是long拥有8个字节,而int拥有4个字节,因此,如果尝试将long转换为int则可能会损失精度和编译器不允许这样做。 默认情况下,Java中任何数字值都将被视为int,将int值用于数组索引,在您的代码中,简单的类型转换应该可以尝试
public void removePermission(String permission){
for (PermissionAttachmentInfo paInfo : getEffectivePermissions()) {
if (paInfo.getAttachment() != null && paInfo.getAttachment().getPlugin().equals(ServerCore.getPlugin())) {
paInfo.getAttachment().unsetPermission(permission);
paInfo.getAttachment().setPermission(permission, false);
}
}
}
public Set<PermissionAttachmentInfo> getEffectivePermissions(){
return player.getEffectivePermissions();
}