【问题标题】:Array index property in JavaJava中的数组索引属性
【发布时间】:2015-08-17 18:54:46
【问题描述】:

我是 Java 编程新手,我正在使用数组。在数组中 索引需要是一个整数,它不允许浮点数或双精度数,所以我使用长数据类型作为索引,它给出了错误。而当我使用 byte 和 short 和 Int 时,它起作用了。我想知道,因为错误是“从 long 到 int 的可能有损转换” 是否只允许在索引中使用 int 并且由于 byte 和 short 的大小很小,这就是它起作用的原因(自动提升)并且 long 大于 int 所以它给出了错误(没有自动降级)plz帮助

  import Java.util.*;
  class Demo{ 
public static void main(String args[]){
        long n=5;
        int a[]=new int[n]; //error possible lossy conversion from long to int
        System.out.println(Arrays.toString(a));
    }

   }

【问题讨论】:

  • 是的,你是对的;只有整数可用作数组索引,byteshort 可以自动提升为 int
  • long 是 8 个字节,因此如果有超过 4 个字节的信息,则在转换为 4 字节 int 时会丢失该信息。因此lossy conversion.

标签: java


【解决方案1】:

简而言之,这是因为这就是语言的设计方式。如果您查看 Java 语言规范的section 10.7,您会注意到数组的长度被定义为int(小于long)。从语义上讲,intslongs 表示整数,但“较大”的整数类型不会自动转换为“较小”的整数类型。

【讨论】:

    【解决方案2】:

    需要整数。 Long、short、byte、float 是其他数据类型。您提供的数据类型可能会发生隐式或显式转换,但您的数组索引只会由 javac 使用 int 构造。

    一个数组对象包含许多变量。变量的数量可能为零,在这种情况下,数组被称为是空的。数组中包含的变量没有名称;相反,它们被使用非负整数索引值的数组访问表达式引用。这些变量称为数组的组件。如果一个数组有 n 个分量,我们说 n 是数组的长度;使用从 0 到 n - 1(含)的整数索引来引用数组的组件。

    Oracle Docs

    【讨论】:

      【解决方案3】:

      您不能将 long 转换为 int,或者不能从 long 转换为 int。 您唯一可以做的转换是

      • byte 转 short、int、long、float 或 double

      • 短到 int、long、float 或 double

      • char 转 int、long、float 或 double

      • int 到 long、float 或 double

      • long to float or double

      • 浮动到两倍

      由于您有 int 数组,因此您可以存储 int 、short 和 byte 数据类型值

      【讨论】:

      • 你真的能做到longfloat 吗?我不会猜到因为float 是4 个字节。每天学习新东西。
      • 我只是想知道为什么字节短和长不允许作为索引。当它们是整数并且不包括小数时。
      • @dcmotor 当您将 byteshortlong 作为数组索引传递时,您正在进行 implicit 强制转换.数组访问器请求int,因此无论您传递什么,它都必须可转换为int 数据类型。上面列出的转换可用于 implicit 转换。您可以显式long 转换为int,但可能会丢失数据。 yourArray[(int)yourLongValue].
      • 我明白了,所以在 Java 中只允许 int 作为索引,而 byte,short,long 被类型转换为 int 。但是仍然因为索引需要是一个没有小数的数字,所以默认情况下 Java 不允许长、短、字节作为索引。这背后有什么具体原因吗?
      • @dcmotor byteshort 可以隐式强制转换为int,因为它们是较小的数据类型,而long必须显式强制转换 因为它是一个更大的数据类型。必须显式强制转换,因为语言希望您基本上确认您知道long转换为int可能会丢失信息.我不知道还能如何解释这一点。您不能将 8 个字节 (long) 放入 4 个字节 (int),因为没有足够的空间。您可以将 1 个字节 (byte) 或 2 个字节 (short) 放入 int,因为有足够的空间。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-30
      • 2012-09-28
      • 2015-07-04
      • 1970-01-01
      • 2014-02-24
      相关资源
      最近更新 更多