如何在Java中声明要长整型的数组?

时间:2018-07-20 17:32:33

标签: java arrays long-integer

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

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];

有人可以解释为什么会这样吗?

4 个答案:

答案 0 :(得分:3)

new long[n][2]中,n2均为数组维度大小,因此应为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();
}