Contexto
En el ecosistema Java, los arrays y los Strings comparten una raíz común: cómo la JVM organiza la memoria en el Heap.
- Un array es un bloque contiguo de casillas de tamaño fijo. Si querés agrandarlo, debés pedir un bloque nuevo y copiar los elementos con
Arrays.copyOf(). - Un
Stringes un objeto inmutable respaldado por un array de caracteres. Cada vez que concatenás con el operador+en un bucle, la JVM crea un nuevo objeto en memoria y descarta el anterior, generando un desperdicio enorme de recursos. Para ensamblar reportes o textos dinámicos de forma eficiente, la herramienta profesional esStringBuilder. - Al comparar cadenas, el operador
==evalúa si dos variables apuntan al mismo casillero del Heap, no si tienen las mismas letras. Por eso, comparar textos siempre exige.equals().
Consigna
Creá la clase ReporteEstudiantes.java que aplique estos conceptos para procesar las calificaciones de un grupo de estudiantes.
1. Datos de Origen
Declaralos en main:
import java.util.Arrays;
public class ReporteEstudiantes {
public static void main(String[] args) {
String[] estudiantes = {" ana martinez ", "CARLOS LOPEZ", " lucia diaz ", "beto vargas"};
int[][] calificaciones = {
{8, 9, 7},
{4, 5, 6},
{9, 10, 10},
{2, 4, 3}
};
// 1. Normalizar nombres
// 2. Calcular promedios
// 3. Demostrar Arrays.copyOf y Arrays.sort
// 4. Construir tabla con StringBuilder
// 5. Demostrar == vs .equals()
}
}
2. Procesamiento con StringBuilder
Instanciá StringBuilder sb = new StringBuilder(); y agregá encabezados, filas de estudiantes y separadores con .append(). Al finalizar, mostrá el resultado con un único System.out.println(sb.toString());.
3. Prueba de Fuego: == vs .equals()
Creá dos variables:
String base = "JAVA";
String dinamica = new String("JAVA");
Mostrá en consola por qué base == dinamica resulta false (apuntan a instancias distintas) mientras que base.equals(dinamica) resulta true (contienen la misma secuencia de caracteres).