Когда вы объявляете массив, вы можете использовать синтаксис public int[] arr = {1,2};
, но после объявления, когда вы пытаетесь инициализировать его в другом месте (скажем, в методе), вы не можете использовать сокращение, необходимое для этого, например arr = new int[]{1,2};
.
Это связано с тем, что когда вы объявляете массив и инициализируете его некоторыми значениями, public int[] arr = {1,2};
пространство для элементов массива (два в данном случае) выделяется и не может быть изменено позже, если вы не создадите новый объект массива и снова назначьте его этому полю. Свойство final length
объекта массива устанавливается, когда вы объявляете его с помощью инициализатора массива.
Но позже, когда вы делаете arr = new int[]{1,2};
, вы фактически создаете новый объект массива и назначаете уже объявленному полю.
TL;DR:
Синтаксис инициализатора массива {}
разрешен только во время объявления массива, где синтаксис конструктора массива new type[]{}
разрешен после объявления в операторе присваивания.
person
Fullstack Guy
schedule
05.08.2019