Есть несколько вещей, которые вы можете сделать с массивами, которые удивляют.
Это массив или нет?
|
1
|
Serializable array = new Serializable[9]; |
Массив — это массив или скаляр? Ну, это скаляр, который указывает на массив. Как
|
1
|
Object o = new Object[9]; |
Вы можете назначить массив объекту, потому что он также является объектом. Однако массивы также можно сериализовать, поэтому вы можете назначить их сериализуемым.
Куда мой [] пошел?
[] Может появляться в удивительных местах. Это компилируется по причинам обратной сопоставимости.
|
1
2
3
|
public static int method(int[]... args)[] { return args[0];} |
И типы здесь; args — это int [] [], а тип возвращаемого значения — int []. Вы заметили [] после объявления метода! Это не является частью JLS, и OpenJDK позволяет это по причинам обратной совместимости.
В чем разница между массивом int [] и массивом int [] ?
Есть разница в том, что последует за этим.
|
1
|
int[] array, x[]; |
и
|
1
|
int array[], y[]; |
В этих случаях; x является целым [] [], но y является только целым [] .
Что происходит, если инициализация массива слишком велика?
Скажем, я инициализирую массив, как это
|
1
2
3
4
5
|
public static final int[] VALUES = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, /* many, many lines deleted */ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,}; |
Сообщение об ошибке:
|
1
|
Error:(6, 31) java: code too large |
Это кажется немного странным. Не жалуется, что массив слишком большой. Фактически, если у меня будет больше статических полей или я использую большие константы, это приведет к ошибке для меньшего массива
Это происходит потому, что массивы инициализируются в байтовом коде. Там байт-код создает массив и инициализирует каждое значение, по одному за раз. Это приводит к большому количеству кода для больших массивов, что было бы такой проблемой, если бы не было ограничения в размере метода. т.е. 65535 байт. Компилятор генерирует один и только один метод для конструктора или статической инициализации, поэтому это ограничивает количество перечислений, которые вы можете иметь, и размер ваших инициализированных массивов.
| Ссылка: | Массивы Java, Ват !? от нашего партнера JCG Питера Лоури из блога Vanilla Java . |