1. String
matriz
Me gustaría darle una breve descripción general acerca de String
las matrices.
Como dijimos anteriormente, una matriz puede ser de cualquier tipo. Esto significa que puede crear una matriz de String
s. 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:
|
Crear un Scanner objeto 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 int
con String
al crear la matriz. Bueno, y al leer la cadena desde el teclado, también reemplazamos el nextInt()
método con nextLine()
.
2. String
matriz en memoria
Y un hecho más útil. Consideremos 3 imágenes:
Imagen 1.String
Cómo se organiza un objeto 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 String
variable 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:
Esta imagen también es familiar.
Imagen 3. 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 String
el propio objeto de matriz.
Y a la derecha hay objetos de cadena que almacenan algo de texto.
Las celdas de la String
matriz 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 String
las variables almacenan las direcciones de los objetos de cadena (donde se almacena el texto).
Tenga esto en cuenta cuando compare celdas de matriz:
|
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"};
GO TO FULL VERSION