1. Stringmatriz

Me gustaría darle una breve descripción general acerca de Stringlas matrices.

Como dijimos anteriormente, una matriz puede ser de cualquier tipo. Esto significa que puede crear una matriz de Strings. Si quisiéramos escribir un programa que "lea 10 líneas del teclado y las muestre en orden inverso", así es como se vería el 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]);
}
Crear un Scannerobjeto
Crear un objeto de matriz de 10 elementos
Hacer un bucle de 0 a 9

Leer una cadena del teclado y guardarla en la siguiente celda de la matriz
Hacer un bucle de 9 a 0

Mostrar la siguiente celda de la matriz

¡El código apenas cambió! Solo tuvimos que reemplazar intcon Stringal crear la matriz. Bueno, y al leer la cadena desde el teclado, también reemplazamos el nextInt()método con nextLine().


2. Stringmatriz en memoria

Y un hecho más útil. Consideremos 3 imágenes:

Imagen 1.String Cómo se organiza un objeto en la memoria:

Matriz de cadenas en la memoria

Esta foto fue tomada de lecciones anteriores.

Tenga en cuenta que el texto de la cadena no se almacena directamente en la variable: se le asigna un bloque de memoria separado. Una Stringvariable almacena la dirección (referencia) a un objeto que almacena el texto.

Imagen 2. Cómo se organiza una matriz de enteros en la memoria:

Matriz de cadenas en la memoria 2

Esta imagen también es familiar.

Imagen 3. Cómo se organiza una matriz de cadenas en la memoria:

Cómo se organiza una matriz de cadenas en la memoria

A la izquierda vemos una variable de matriz cuyo tipo es String[](almacena la dirección de un objeto de matriz).

En el medio, tenemos Stringel propio objeto de matriz.

Y a la derecha hay objetos de cadena que almacenan algo de texto.

Las celdas de la Stringmatriz no almacenan las cadenas en sí mismas (el texto de los objetos String). En su lugar, almacenan sus direcciones (referencias a ellas). De la misma manera que Stringlas variables almacenan las direcciones de los objetos de cadena (donde se almacena el texto).

Tenga esto en cuenta cuando compare celdas de matriz:

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]);
Cree una matriz de 10 cadenas

Ponga valores en la matriz



true (las referencias son iguales)
false (las referencias no son iguales)
true (las cadenas son iguales)
true(las cadenas siguen siendo iguales)


3. Inicialización rápida de arreglos en Java

Las matrices son muy útiles, por lo que los creadores de Java intentaron que trabajar con ellas fuera lo más conveniente posible.

Lo primero que hicieron fue simplificar la inicialización de matrices, el proceso mediante el cual proporciona los valores iniciales de una matriz.

Después de todo, además de los datos leídos desde algún lugar, un programa también necesita con bastante frecuencia sus propios datos internos para poder funcionar. Por ejemplo, supongamos que necesitamos almacenar la duración de cada mes en una matriz. Así es como podría verse el código:

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

Pero gracias a los creadores de Java, hay una forma de escribir esto de manera más concisa:

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

¡Simplemente puede enumerar todos los valores de la matriz, separados por comas!

Conveniente, ¿verdad? Pero eso no es todo.

Da la casualidad de que el compilador puede determinar el tipo del contenedor (objeto de matriz) en función del tipo de los valores de la matriz. Y para determinar la longitud de la matriz, es trivial contar la cantidad de elementos escritos entre llaves.

Eso significa que este código se puede escribir aún más corto:

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

Una cosa de la belleza, ¿no? 🙂

Esto se denomina "inicialización rápida de matriz". Por cierto, esto funciona para tipos que no sean int...

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