Массив в Java - это объект. В Java мы можем создавать массивы с помощью оператора new, и мы знаем, что каждый объект создается с помощью оператора new .
В Java есть класс для каждого типа массива, поэтому есть класс для int [] и аналогично для float, double и т. Д.
Прямой суперкласс типа массива - Object. Каждый тип массива реализует интерфейсы Cloneable и java.io.Serializable . Все методы класса Object могут быть вызваны в массиве. Это можно проверить из приведенного ниже кода:
public class Test {
public static void main(String[] args)
{
System.out.println(args instanceof Object);
int[] arr = new int[2];
System.out.println(arr instanceof Object);
}
}
Вывод: True
Правда
Оператор diamond, используемый при инициализации ArrayList, указывает универсальный тип. Универсальный тип - это универсальный класс или интерфейс, параметризованный над типами.
Вы можете просмотреть исходный код ArrayList здесь: http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/tip/src/share/classes/java/util/ArrayList.java
Вы можете видеть, что тип elementData в параметризованном конструкторе - Object. Примитив - это тип данных, который не является объектом:
private transient Object[] elementData;
Так как int является примитивным типом данных в java, его нельзя использовать как универсальный тип, где int [] , который имеет прямой объект суперкласса, может быть.
Подробнее об этом можно прочитать здесь: https://docs.oracle.com/javase/specs/jls/se7/html/jls-10.html