Является ли массив объектом java

В java мы можем объявить массив вроде

String[] array = new String[10]; 
int size = array.length; 

Означает ли это, что сам массив является объектом? Поскольку в С++ массив является всего лишь указателем и не имеет каких-либо методов.

Ответ 1

Да.

Спецификация языка Java раздел 4.3.1 начинается с:

Объект - это экземпляр класса или массив.

Ответ 2

Да; Спецификация языка Java пишет:

На языке программирования Java массивы являются объектами (§4.3.1), динамически создаются и могут быть назначены переменным типа Object (§ 4.3.3). Все методы класса Object могут быть вызваны в массиве.

Ответ 3

Хорошо, позвольте спросить Java!

public class HelloWorld
{
  public static void main(String[] args)
  {
    System.out.println(args instanceof Object);
    int[] someIntegers = new int[] {42};
    System.out.println(someIntegers instanceof Object);
  }
}

Вывод:

true
true

Ответ 4

Да, это объект в Java.

Также обратите внимание, что при выполнении array.length вы не вызываете никаких методов, а просто получаете доступ к массиву length. Существует много статических методов в классе Arrays.

Ответ 5

Важно отметить, что массивы в Java имеют свои собственные байтовые коды, которые они не разделяют с объектами. Они, конечно, являются объектами, но обрабатываются немного по-другому на низком уровне.

Ответ 6

Я бы сказал, что ответ да, хотя я мог бы добавить, что, строго говоря, массив также является объектом на С++. Из § 1.8 [intro.object] текущего стандарта (FDIS):

Объект - это область хранения.

Ответ 7

Я просто хочу добавить, что массивы имеют представление в API отражения - java.lang.reflect.Array.

Ответ 8

Каждый массив в java является объектом ex int [] a = новый int [2]; Поэтому для создания объекта используется новый, и поскольку он является объектом, мы можем проверить имя класса, просто используя a.getClass(). GetName();

Ответ 9

  1. Массив не является экземпляром какого-либо класса, указанного в дереве классов, однако каждый массив является объектом и наследуется непосредственно от java.util.Object
(new int[1]) instanceof Object   // -> evaluates to true
  1. Класс java.util.Arrays является вспомогательным классом, и массивы не являются экземплярами этого класса.
(new int[1]) instanceof java.util.Arrays    // -> compile error
  1. Класс java.lang.reflect.Array является вспомогательным классом, и массивы не являются экземплярами этого класса.
(new int[1]) instanceof java.lang.reflect.Array    // -> compile error
  1. Массивы наследуют все члены java.lang.Object

  2. Массивы переопределяют метод clone() унаследованный от Object.

  3. Массивы реализуют length поля, которая содержит количество компонентов массива. длина может быть положительной или нулевой. Это public и final.

  4. Массивы реализуют интерфейсы Cloneable и java.io.Serializable.

8а. Массивы поддерживаются Class<T>. Вы можете извлечь экземпляр Class<T> из экземпляра массива

(new int[2]).getClass()

или из типа массива

int[].class

8б. Уникальный экземпляр класса отражения (т.е. экземпляр java.lang.Class<T>) создается для каждого отдельного типа массива в вашем коде. Примеры

int[].class.getCanonicalName()    //  -> "int[]"
String[].class.getCanonicalName() //  -> "java.lang.String[]" /
  1. Повторим: массивы являются объектами, но не являются экземплярами какого-либо класса в дереве классов.

РЕКОМЕНДАЦИИ

Из спецификации Java Раздел 4.3.1 Объекты

  • Объект является экземпляром класса или массивом.

  • Экземпляр класса явно создается выражением создания экземпляра класса.

  • Массив явно создается выражением создания массива.

Из java.util.Arrays

  • Этот класс содержит различные методы для работы с массивами (такие как сортировка и поиск)

От java.lang.reflect.Array

  • Класс Array предоставляет статические методы для динамического создания и доступа к массивам Java.

Из раздела 10.1 Объекты

  • Прямой суперкласс типа массива - Object.

  • Каждый тип массива реализует интерфейсы Cloneable и java.io.Serializable.

Из раздела 10.7 Члены массива

Членами типа массива являются все следующие:

  • Публичная конечная length поля, которая содержит количество компонентов массива. длина может быть положительной или нулевой.

  • Открытый метод clone, который переопределяет метод с тем же именем в классе Object и не выдает никаких проверенных исключений. Тип возврата метода clone типа массива T[] - T[].

  • Клон многомерного массива неглубокий, то есть он создает только один новый массив. Подмассивы являются общими.

  • Все члены унаследованы от класса Object; единственный метод Object, который не наследуется, это его метод клонирования.

Ответ 10

Обратите внимание на фрагмент кода и вывод.

public class Tester {
int a[];
public static void main(String[] args) {
    System.out.println(new Tester().a);// null
    System.out.println(new Tester().a[0]);// Exception in thread "main" java.lang.NullPointerException \n at mainclass.Tester.main(Tester.java:10)
}

}

Ясно, что массив a рассматривается как объект.