1. Matrizes na memória

Nos exemplos anteriores, as ilustrações eram um pouco imprecisas.

Ao criar arrays (como ao criar strings), dois blocos separados de memória são alocados: um para armazenar o próprio array (container) e um segundo bloco para a variável que armazena seu endereço . A figura abaixo representa esse esclarecimento:

Matrizes na memória

A memória alocada para o array de 10 intelementos e a int[]variável que armazena o endereço do intarray é mostrada em verde.

intPara comparação, uma variável comum que armazena o valor 199é mostrada em azul.

Isso lembra um pouco o armazenamento de strings na memória, não acha?

Isso mesmo, cordas. E assim como quando você trabalha com strings, você pode atribuir variáveis ​​de array umas às outras:

Código Explicação
int[] a = new int[10];
a[2] = 4;
a[7] = 9;
int[] b = a;

a[9] = b[2] + a[7];
Crie uma matriz de 10 intelementos.
Atribua o valor 4à célula com index 2.
Atribua o valor 9à célula com index 7.
Na bvariável, salve o endereço armazenado na avariável.
Agora ae baponte para o mesmo objeto de matriz na memória.
Na célula do objeto array com índice 9, escreva a soma dos valores que estão armazenados nas células 2(que armazena o valor 4) e 7(que armazena o valor 9).

O objeto array fica exatamente onde estava, e as avariáveis b​​e armazenam o mesmo endereço (referência) para o mesmo objeto. Olha a foto:

Matrizes na memória 2

2. Mais detalhes sobre como trabalhar com arrays

Você pode criar uma matriz de elementos de absolutamente qualquer tipo. Para fazer isso, basta escrever colchetes após o nome do tipo. Em geral, a criação de um array se parece com isso:

type[] name = new type[number];

Onde type é o tipo dos elementos que iremos armazenar no array. Name é o nome da variável que usaremos para nos referir ao array, e number é o número de células no array.

O exemplo acima é a forma canônica para criar uma variável de array e um objeto de array. Na realidade, essas são duas entidades separadas.

Você pode criar uma variável de array separadamente de um objeto de array:

type[] name;
name = new type[number];

E mais um ponto que não é insignificante:

Você pode usar variáveis ​​ou até mesmo expressões inteiras como matriz de índice e número de elementos da matriz .

Exemplos:

Código Explicação
int n = 100;
int[] a = new int[n];
Criar uma matriz de nelementos
int n = 100;
int[] a = new int[n * 2 + 3];
Criar uma matriz com 203elementos
int n = 100;
int[] a = new int[n];
a[n-1] = 2;
a[n-2] = 3;
a[n/5] = a[n-1] + a[n-2]


// a[99] = 2;
// a[98] = 3;
// a[20] = a[99] + a[98];
Importante:
A propósito, você deve estar ciente de que, se tentar acessar uma célula de array usando um índice que não existe para o array (em nosso exemplo, isso significa qualquer número inteiro fora do intervalo ), o programa travará com 0..99um ArrayIndexOfBoundException, o que significa que o índice estava fora dos limites da matriz.

3. Comprimento da matriz

Como você viu no exemplo anterior, você pode criar uma variável de array sozinha e depois atribuir um valor (uma referência a um objeto de array) a ela em algum lugar do código. Você pode até fazer isso:

Código Explicação
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
Crie uma variável de matriz cujo tipo seja int[]
Se a avariável for menor que 10,
crie uma matriz de 10elementos.
Caso contrário,
crie uma matriz de 20elementos

E agora o que mais você pode fazer com essa matriz? Como você sabe quantos elementos estão nele?

Para ajudar com isso, os arrays possuem uma propriedade especial (variável) chamada length. Você pode encontrar o comprimento de uma matriz usando esta expressão:

array.length;

Aqui arrayestá o nome da variável do array e lengthé o nome da propriedade do array. O valor da lengthpropriedade não pode ser alterado: a lengthprópria propriedade pode ser atribuída a outras variáveis, mas nada pode ser atribuído a ela (se você tentar fazer isso, o programa simplesmente não será compilado).

Podemos continuar com o exemplo anterior assim:

Código Explicação
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
for (int i = 0; i < array.length; i++)
{
   System.out.println(array[i]);
}
Crie uma variável de matriz cujo tipo seja int[]
Se a avariável for menor que 10,
crie uma matriz de 10elementos.
Caso contrário,
crie uma matriz de 20elementos
Faça um loop sobre todos os elementos da matriz: de 0ao comprimentoarray.length - 1

4. Resumo dos fatos sobre arrays em Java

Vamos recapitular o que sabemos sobre arrays:

Fato 1. Uma matriz consiste em muitas células.

Fato 2. Você acessa uma célula específica usando seu número (índice).

Fato 3. Todas as células são do mesmo tipo.

Fato 4. O valor inicial de todas as células é 0 (se as células armazenam números), null(se as células armazenam referências de objetos) ou false(se as células armazenam booleanvalores). Você aprenderá mais sobre os valores padrão neste capítulo .

Fato 5. String[] list é apenas a declaração de uma variável. Isso não cria o contêiner (objeto de matriz) em si. Para usar a variável, você precisa primeiro criar um array (container) e atribuí-lo à variável. Veja o exemplo abaixo.

Fato 6. Quando criamos um objeto array (container), devemos indicar o tamanho dele, ou seja, quantas células ele contém. Isso é feito com uma instrução como: new TypeName[n];

Fato 7. O comprimento de um array pode ser encontrado usando a .lengthpropriedade.

Fato 8. Depois de criar um array, você não pode alterar o tipo de seus elementos ou o número de elementos que ele armazena.

Código Explicação
String s;
String[] list;
sé null
listénull
list = new String[10];
int n = list.length;
A listvariável armazena uma referência a um objeto: uma matriz de strings composta por 10elementos.
né10
list = new String[0];

Agora listrefere-se a uma matriz de 0elementos. A matriz existe, mas não pode armazenar nenhum elemento.

list = null;
System.out.println(list[1]);
Uma exceção (erro de programa) será lançada, ou seja, o programa travará. listarmazena uma referência anull
list = new String[10];
System.out.println(list[10]);
Uma exceção de matriz fora dos limites (erro de programa) será gerada.
Se a listarmazena 10elementos/células, então os índices válidos são: 0 1 2 3 4 5 6 7 8 910elementos.