← Volver a actividades
Autoevaluación

Autoevaluación: Arrays y Manejo de Strings

Arrays y Manejo de Strings en Java · 15 min aprox.

Respondé todas las preguntas y presioná Calificar para ver tu puntaje.

1. ¿Por qué el acceso a un elemento de un array mediante su índice (por ejemplo arr[i]) tiene un costo de tiempo constante O(1)?
Correcto Incorrecto Sin responder

Respuesta correcta: Porque los elementos residen en un bloque contiguo de memoria y su dirección física se calcula con una simple suma aritmética.

¿Por qué? Un array en Java es un bloque continuo y sin huecos en el Heap. La dirección de cualquier elemento se obtiene instantáneamente con la fórmula: dirección_base + índice * tamaño_casilla. Al no requerir búsquedas ni recorridos, el acceso es inmediato (O(1)).

2. La instrucción String[] nombres = new String[4]; inicializa un array con cuatro cadenas de texto vacías "".
Correcto Incorrecto Sin responder

Respuesta correcta: Falso

¿Por qué? String es un tipo por referencia, no primitivo. Al instanciar un array de referencias con new, Java inicializa cada casilla con su valor por defecto, que es null. Si intentás llamar a nombres[0].length() sin haber asignado un objeto antes, se producirá un NullPointerException.

3. ¿Qué salida produce por consola la ejecución del siguiente código?
String s1 = new String("Java");
String s2 = new String("Java");
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
Correcto Incorrecto Sin responder

Respuesta correcta: false y true

¿Por qué? El operador == compara referencias (direcciones de memoria en el Heap). Al usar new String(), se crean dos objetos distintos en posiciones de memoria diferentes, por lo que s1 == s2 da false. Por otro lado, el método .equals() compara el contenido de caracteres, devolviendo true.

4. Una vez creado un array en Java, es posible modificar su tamaño en memoria aumentando su capacidad sin crear un nuevo bloque.
Correcto Incorrecto Sin responder

Respuesta correcta: Falso

¿Por qué? Los arrays en Java son estrictamente de longitud fija. Inmediatamente después de su bloque contiguo en el Heap puede haber otros datos ubicados por la JVM. Para "agrandar" un array se debe instanciar un nuevo array de mayor capacidad y copiar los elementos existentes (por ejemplo con Arrays.copyOf).

5. ¿Qué excepción arroja este código al ejecutarse?
int[] numeros = {10, 20, 30};
System.out.println(numeros[3]);
Correcto Incorrecto Sin responder

Respuesta correcta: ArrayIndexOutOfBoundsException

¿Por qué? Los índices en un array de tamaño 3 van desde 0 hasta length - 1 (es decir, 0, 1 y 2). Intentar acceder al índice 3 excede los límites válidos del bloque, provocando un ArrayIndexOutOfBoundsException en tiempo de ejecución.

6. ¿Por qué se recomienda utilizar StringBuilder en lugar de concatenar con el operador + dentro de un bucle de muchas iteraciones?
Correcto Incorrecto Sin responder

Respuesta correcta: Porque String es inmutable: concatenar con + crea un objeto nuevo en cada vuelta, saturando la memoria y el Garbage Collector.

¿Por qué? Al ser String inmutable, cada concatenación con + genera un nuevo objeto String en el Heap y descarta el anterior, resultando en un costo cuadrático O(n²) y gran presión para el Garbage Collector. StringBuilder mantiene un búfer interno modificable que muta en memoria con costo lineal O(n).

7. En Java, para consultar la longitud de un array se accede al atributo array.length (sin paréntesis), mientras que en String se llama al método texto.length() (con paréntesis).
Correcto Incorrecto Sin responder

Respuesta correcta: Verdadero

¿Por qué? Es una distinción histórica fundamental en Java: en los arrays, length es una propiedad especial inmutable del contenedor (array.length), mientras que en la clase String es un método que devuelve la cantidad de caracteres (texto.length()).

8. ¿Qué valor imprime este código en consola tras invocar toUpperCase()?
String texto = "hola";
texto.toUpperCase();
System.out.println(texto);
Correcto Incorrecto Sin responder

Respuesta correcta: hola

¿Por qué? Los Strings son inmutables. El método toUpperCase() no modifica la cadena original "hola", sino que genera y retorna una nueva instancia con el texto en mayúsculas. Como en el código no se reasignó el resultado (texto = texto.toUpperCase();), la variable texto conserva su valor original "hola".

9. ¿Qué método de la clase java.util.Arrays permite imprimir en una sola línea el contenido legible de un vector unidimensional (por ejemplo [1, 2, 3])?
Correcto Incorrecto Sin responder

Respuesta correcta: Arrays.toString(array)

¿Por qué? Si pasás un array directamente a System.out.println(array), Java imprimirá la representación por defecto del objeto (ej. [I@7f3a2c). La utilidad estándar Arrays.toString(array) formatea los elementos entre corchetes separados por comas.

10. El String Constant Pool es una zona del Heap donde la JVM reutiliza instancias de literales de texto idénticos para ahorrar memoria.
Correcto Incorrecto Sin responder

Respuesta correcta: Verdadero

¿Por qué? Cuando se define un literal como String a = "hola"; y luego String b = "hola";, la JVM no duplica la memoria: ambas referencias apuntan a la misma entrada dentro del String Constant Pool. Por eso, en literales puros, a == b evalúa true.