【问题标题】:How are arrays implemented in java?java中的数组是如何实现的?
【发布时间】:2011-01-17 02:08:57
【问题描述】:

数组在java中被实现为对象,对吗?如果是这样,我在哪里可以查看数组类的源代码。我想知道数组中的长度变量是否定义为常量,如果是,为什么它不是全部大写字母 LENGTH 以使代码更易于理解。

【问题讨论】:

  • 如果它是一个常量(如在静态 final 字段中),则所有数组都必须具有相同的大小(或者不同大小的数组必须具有不同的类型(这进一步意味着数组的大小必须在编译时知道))。
  • 据我从以下 Yishai 的回答中了解到,数组是在定义时动态创建的。
  • sepp2k 的要点是没有一个全局长度字段。通常,我们将大写变量视为 public static 和 final。这里的长度是公共的和最终的,但不是静态的,并且每个对象实例的值都不同,尽管它永远不会改变。

标签: java arrays constants


【解决方案1】:

虽然数组在继承 java.lang.Object 的意义上是对象,但类是作为语言的一个特殊特性动态创建的。它们没有在源代码中定义。

考虑这个数组:

MySpecialCustomObject[] array;

没有这样的源代码。您已经在代码中动态创建了它。

length 和 field 之所以是小写的,实际上是因为在开发它的时候还不存在后来的 Java 编码标准。如果今天正在开发一个数组,它可能是一个方法:getLength()。

长度是在对象构造时定义的最终字段,它不是一个常数,所以一些编码标准不希望它是大写的。但是总的来说,在今天的 Java 中,所有内容通常要么作为大写常量完成,要么使用公共 getter 方法标记为私有,即使它是最终的。

【讨论】:

【解决方案2】:

对于我们声明的每个 Array,Java 中都有对应的类,但我们无法使用。您可以使用 getClass().getName() 来查看这些类

    int[] arr=new int[10];
    System.out.println(arr.getClass().getName());

输出:[我

其中“[”代表一维数组,“I”代表整数。 同样,我们可以有

    [F for one-dimensional float arrays
    [Z for one-dimensional boolean arrays
    [J for one-dimensional long arrays
    [[I for two-dimensional int arrays

等等。

【讨论】:

    【解决方案3】:

    在 Java 中实现数组需要访问内存位置或进行指针运算。由于 Java 不允许您分配内存,它会为您执行 Arrays 实现。 Java 语言提供了该实现。

    【讨论】:

    • 不是黑匣子:有源代码。
    【解决方案4】:

    我们可以说数组是一个容器,它保存固定长度的单一数据类型的数据。 例如。

    int[] MyArray = new int[101]; // allocates memory for 101 integers, Range from 0 to 100.
    

    对于多维

    String[][] names = {{"FirstName", "LastName"},{"Kaji", "Islam"},...};
    

    对于字符数组

    char[] ch={'a','b'....};
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-10
      • 1970-01-01
      • 2013-11-20
      • 2020-10-18
      • 2010-09-26
      • 1970-01-01
      • 2018-10-31
      • 1970-01-01
      相关资源
      最近更新 更多