1. Stringmatriz

Eu gostaria de lhe dar uma breve visão geral sobre Stringarrays.

Como dissemos anteriormente, um array pode ser de qualquer tipo. Isso significa que você pode criar uma matriz de Strings. Se quiséssemos escrever um programa que "leia 10 linhas do teclado e as exiba na ordem inversa", veja como seria o código:

Scanner console = new Scanner(System.in);
String[] array = new String[10];
for (int i = 0; i < 10; i++)
{
   array[i] = console.nextLine();
}
for (int i = 9; i >= 0; i--)
{
   System.out.println(array[i]);
}
Criar um Scannerobjeto
Criar um objeto array de 10 elementos Fazer um
loop de 0 a 9

Ler uma string do teclado e salvá-la na próxima célula do array
Fazer um loop de 9 a 0

Exibir a próxima célula no array

O código quase não mudou! Só tivemos que substituir intpor Stringao criar o array. Bem, e ao ler a string do teclado, também substituímos o nextInt()método por nextLine().


2. Stringmatriz na memória

E mais um fato útil. Vamos considerar 3 fotos:

Figura 1. Como um Stringobjeto é organizado na memória:

Matriz de strings na memória

Esta foto foi tirada de aulas anteriores.

Observe que o texto da string não é armazenado diretamente na variável: um bloco separado de memória é alocado para ela. Uma Stringvariável armazena o endereço (referência) para um objeto que armazena o texto.

Figura 2. Como um array inteiro é organizado na memória:

Matriz de strings na memória 2

Esta imagem também é familiar.

Figura 3. Como um array de strings é organizado na memória:

Como um array String é organizado na memória

À esquerda vemos uma variável array cujo tipo é String[](armazena o endereço de um objeto array).

No meio, temos Stringo próprio objeto array.

E à direita estão objetos de string que armazenam algum texto.

As células do Stringarray não armazenam as próprias strings (o texto dos objetos String). Em vez disso, eles armazenam seus endereços (referências a eles). Da mesma forma que Stringas variáveis ​​armazenam os endereços dos objetos string (onde o texto é armazenado).

Leve isso em consideração ao comparar células de array:

String[] array = new String[10];

array[1] = "Hello";
array[2] = array[1];
array[3] = new String("Hello");
// Compare
array[1] == array[2];
array[1] == array[3];
array[1].equals(array[3]);
array[1].equalsIgnoreCase(array[3]);
Crie um array de 10 strings

Coloque valores no array



true (as referências são iguais)
false (as referências não são iguais)
true (as strings são iguais)
true(as strings ainda são iguais)


3. Inicialização rápida do array em Java

Arrays são super úteis, então os criadores de Java tentaram tornar o trabalho com eles o mais conveniente possível.

A primeira coisa que eles fizeram foi simplificar a inicialização do array, o processo pelo qual você fornece os valores iniciais de um array.

Afinal, além dos dados lidos de algum lugar, um programa muitas vezes também precisa de seus próprios dados internos para funcionar. Por exemplo, suponha que precisamos armazenar as durações de cada mês em uma matriz. Isto é o que o código pode parecer:

int[] months = new int[12];
months[0] = 31; // January
months[1] = 28; // February
months[2] = 31; // March
months[3] = 30; // April
months[4] = 31; // May
months[5] = 30; // June
months[6] = 31; // July
months[7] = 31; // August
months[8] = 30; // September
months[9] = 31; // October
months[10] = 30; // November
months[11] = 31; // December

Mas, graças aos criadores do Java, existe uma maneira de escrever isso de forma mais concisa:

// Lengths of months of the year
int[] months = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

Você pode simplesmente listar todos os valores da matriz, separados por vírgulas!

Conveniente, certo? Mas isso não é tudo.

Acontece que o compilador pode determinar o tipo do container (objeto array) baseado no tipo dos valores do array. E para determinar o comprimento do array, é trivial contar o número de elementos escritos entre chaves.

Isso significa que este código pode ser escrito ainda mais curto:

// Lengths of months of the year
int[] months = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

Uma beleza, não? 🙂

Isso é chamado de "inicialização rápida da matriz". A propósito, isso funciona para tipos diferentes de int...

// Names of months of the year
String[] months = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November ", "December"};