Sim, ele cria apenas referências, que são definidas com seu valor padrão nulo. É por isso que você recebe uma NullPointerException. Você precisa criar objetos separadamente e atribuir a referência. Existem 3 etapas para criar matrizes em Java -
Declaração - Nesta etapa, especificamos o tipo de dados e as dimensões da matriz que vamos criar. Mas lembre-se, ainda não mencionamos os tamanhos das dimensões. Eles são deixados em branco.
Instanciação - Nesta etapa, criamos a matriz ou alocamos memória para a matriz, usando a nova palavra-chave. É nesta etapa que mencionamos os tamanhos das dimensões da matriz.
Inicialização - A matriz é sempre inicializada com o valor padrão do tipo de dados. Mas podemos fazer nossas próprias inicializações.
Declarando matrizes em Java
É assim que declaramos uma matriz unidimensional em Java -
int[] array;
int array[];
A Oracle recomenda que você use a sintaxe anterior para declarar matrizes. Aqui estão alguns outros exemplos de declarações legais -
// One Dimensional Arrays
int[] intArray; // Good
double[] doubleArray;
// One Dimensional Arrays
byte byteArray[]; // Ugly!
long longArray[];
// Two Dimensional Arrays
int[][] int2DArray; // Good
double[][] double2DArray;
// Two Dimensional Arrays
byte[] byte2DArray[]; // Ugly
long[] long2DArray[];
E estes são alguns exemplos de declarações ilegais -
int[5] intArray; // Don't mention size!
double{} doubleArray; // Square Brackets please!
Instanciação
É assim que "instanciamos" ou alocamos memória para uma matriz -
int[] array = new int[5];
Quando a JVM encontra a new
palavra-chave, entende que deve alocar memória para alguma coisa. E, especificando int[5]
, queremos dizer que queremos uma matriz de int
s, tamanho 5. Portanto, a JVM cria a memória e atribui a referência da memória recém-alocada à matriz à qual uma “referência” do tipoint[]
Inicialização
Usando um loop - Usar um loop for para inicializar elementos de uma matriz é a maneira mais comum de fazer a matriz funcionar. Não há necessidade de executar um loop for se você deseja atribuir o próprio valor padrão, porque a JVM faz isso por você.
Tudo em um..! - Podemos declarar, instanciar e inicializar nossa matriz de uma só vez. Aqui está a sintaxe -
int[] arr = {1, 2, 3, 4, 5};
Aqui, não mencionamos o tamanho, porque a JVM pode ver que estamos fornecendo 5 valores.
Assim, até instanciarmos as referências permanecem nulas. Espero que minha resposta tenha ajudado ..! :)