NullPointerException em array

Olá, pessoal. Porque este código lança NullPointerException?

int[][] test = new int[3][];
test[0][0] = 0;

Ainda não entendi porque compila inicializar um array multidimensional com coluna vazia []

No Array multidimensional(matriz), cada índice irá conter a referência para outro Array.
Neste momento é criado uma instância de um Array multimensional com três índices reservados para Arrays de ints qualquer:

  • int[][] test = new int[3][];

Estes índices, guardando referências para outras referências(Arrays de ints) não inicializados é passado ao compilador que inicializa-os com o valor padrão(null):

  • suaReferenciaEmAlgumLugarNaMemoria[null, null, null];

Era possível definir um tamanho de Array igual para cada índice como:

  • Array de duas posíções para cada um dos 3 índices:
    • int[][] test = new int[3][2];
  • Array de 3 posíções para cada um dos 3 índices:
    • int[][] test = new int[3][3];
  • Array de 1 posíção para cada um dos 3 índices:
    • int[][] test = new int[3][1];

Porém, ao não definir o tamanho de cada Array tem-se a liberdade de criar Arrays com tamanhos diferentes para cada índice:

  • Array de duas posições no índice 0:
    • test[0] = new int[2];
  • Array de cinco posições no índice 1:
    • test[1] = new int[5];
  • Array de três posições no índice 2:
    • test[2] = new int[3];

O Java dá essa liberdade: definir um tamanho específico para estes Arrays, ou, apenas moldar e definir as instâncias posteriormente.

No caso abaixo, aja visto que não há referência alguma para um Array de ints no seu índice 0, ao tentar acessar este “tal Array” e definir o valor 0 no índice 0 é lançado o NullPointerException.

  • test[0][0] = 0;

Belê?

1 curtida

Eita cara bom. Obrigado.