Bienvenido al Quiz de Java String. La cadena es una de las clases más importantes en Java. Si has programado en Java, seguramente la has utilizado.
La cadena es muy popular cuando se trata de preguntas de entrevistas o cuestionarios en Java. Así que he recopilado algunas preguntas geniales y complicadas para el quiz de cadenas en Java que deberías intentar.
Quiz de Java String
Hay 21 preguntas en este quiz. Si puedes responder correctamente 15 o más, entonces considera que eres realmente bueno en los conceptos de cadenas. Puedes verificar la respuesta y una explicación detallada haciendo clic en el botón “Revelar respuesta” después de cada pregunta.
Comencemos con el Quiz de Cadenas y ¡buena suerte!
1. ¿Cuál será la salida de las siguientes instrucciones?
String s = "Java String Quiz";
System.out.println(s.charAt(s.toUpperCase().length()));
A. Convert “Z” to int 90 and prints “90”
B. Runtime Exception
C. Prints “z”
D. Prints “Z”
Click to Reveal Answer
**Respuesta correcta: B
**
**
Lanzará la excepción en tiempo de ejecución. Excepción en el hilo "main" java.lang.StringIndexOutOfBoundsException: Índice de cadena fuera de rango: 16
. Es porque el valor del índice comienza desde 0.
2. ¿Cuál será la salida de las siguientes instrucciones?
String s = "Java String Quiz";
System.out.println(s.substring(5,3));
A. Prints “Str”
B. Runtime Exception
C. IndexOutOfBoundsException Runtime Exception
D. StringIndexOutOfBoundsException Compile-time error
Click to Reveal Answer
**Respuesta correcta: B
**
**
Lanzará la excepción en tiempo de ejecución con el mensaje de error Excepción en hilo "main" java.lang.StringIndexOutOfBoundsException: comenzar 5, fin 3, longitud 16
. Es porque el índice de fin es menor que el índice de inicio.
3. Selecciona todos los métodos válidos de la clase String.
A. trim()
B. intern()
C. toLower()
D. split()
Click to Reveal Answer
Respuesta correcta: A, B
Métodos válidos de la clase String son – trim(), intern(), toLowerCase() y split(String regex).
4. ¿Cuál será el resultado de las siguientes declaraciones?
String s1 = "Cat";
String s2 = "Cat";
String s3 = new String("Cat");
System.out.print(s1 == s2);
System.out.print(s1 == s3);
A. truefalse
B. truetrue
C. falsefalse
D. falsetrue
Click to Reveal Answer
**Respuesta correcta: A
**
Cuando usamos comillas dobles para crear una cadena de texto, primero busca una cadena con el mismo valor en el grupo de cadenas. Si la encuentra, devuelve la referencia; de lo contrario, crea una nueva cadena en el grupo y luego devuelve la referencia.
Sin embargo, al usar el operador new, obligamos a la clase String a crear un nuevo objeto de cadena en el espacio de almacenamiento heap. Por lo tanto, s1 y s2 tendrán referencia a la misma cadena en el grupo, mientras que s3 será un objeto diferente fuera del grupo, de ahí el resultado.
5. ¿Cuáles de las siguientes afirmaciones son verdaderas para las cadenas en una estructura switch case?
A. String is allowed in switch case for Java 1.5 or higher versions.
B. String is allowed in switch case for Java 1.7 or higher versions.
C. The equals() method is used by switch-case implementation, so add null check to avoid NullPointerException.
6. ¿Cuáles de las siguientes afirmaciones son verdaderas para StringBuffer y StringBuilder?
A. StringBuilder is not thread-safe.
B. StringBuffer is thread safe because its methods are synchronized.
C. StringBuilder was introduced in Java 1.4
D. StringBuffer and StringBuilder are immutable.
Click to Reveal Answer
Respuesta correcta: A, B
El objeto StringBuffer es seguro para subprocesos porque sus métodos están sincronizados. Pero eso implica un sobrecosto en la mayoría de los casos, por lo tanto, se introdujo StringBuilder en Java 1.5. StringBuilder no es seguro para subprocesos. StringBuffer y StringBuilder son clases mutables. Lee más en String vs StringBuffer vs StringBuilder.
7. ¿Qué patrón de diseño sigue la implementación de la clase String?
A. Flyweight Design Pattern
B. Factory Pattern
C. Singleton Pattern
D. None of the above
Click to Reveal Answer
Respuesta correcta: A
La implementación del patrón de diseño flyweight sigue el patrón de diseño flyweight.
8. ¿Cuál será la salida de las siguientes declaraciones?
String s1 = "abc";
String s2 = "def";
System.out.println(s1.compareTo(s2));
A. 0
B. true
C. -3
D. false
Click to Reveal Answer
**Respuesta Correcta: C
**
**
Desde la documentación del método compareTo() de la clase String:
El método compareTo compara dos cadenas lexicográficamente. La comparación se basa en el valor Unicode de cada carácter en las cadenas. La secuencia de caracteres representada por este objeto String se compara lexicográficamente con la secuencia de caracteres representada por la cadena de argumento. El resultado es un entero negativo si este objeto String precede lexicográficamente a la cadena de argumento. El resultado es un entero positivo si este objeto String sigue lexicográficamente a la cadena de argumento. El resultado es cero si las cadenas son iguales; compareTo devuelve 0 exactamente cuando el método equals(Object) devolvería true.
Esta es la definición del orden lexicográfico. Si dos cadenas son diferentes, entonces tienen caracteres diferentes en algún índice que es un índice válido para ambas cadenas, o sus longitudes son diferentes o ambas. Si tienen caracteres diferentes en una o más posiciones de índice, sea k el índice más pequeño; entonces la cadena cuyo carácter en la posición k tiene el valor más pequeño, según lo determinado mediante el operador < lexicográficamente precede a la otra cadena. En este caso, compareTo devuelve la diferencia de los dos valores de caracteres en la posición k en las dos cadenas, es decir, el valor:
this.charAt(k)-anotherString.charAt(k)
En nuestro ejemplo, “abc” precede a “def”, por lo tanto se devuelve un número entero negativo. Luego, el índice más bajo con un carácter diferente es 0 y a-d es igual a -3.
9. ¿Cuál será la salida del siguiente programa?
public class Test {
public static void main(String[] args) {
String x = "abc";
String y = "abc";
x.concat(y);
System.out.print(x);
}
}
A. abc
B. abcabc
C. null
Click to Reveal Answer
Respuesta correcta: A
El código x.concat(y)
creará una nueva cadena, pero no se asigna a x, por lo que el valor de x no cambia.
10. ¿Cuál será la salida del siguiente programa?
public class Test {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
System.out.println("s1 == s2 is:" + s1 == s2);
}
}
A. false
B. s1 == s2 is:true
C. s1 == s2 is:false
D. true
Click to Reveal Answer
Respuesta correcta: A
La salida de las instrucciones dadas será “false” porque en Java, el operador + tiene una precedencia mayor que el operador ==. Por lo tanto, la expresión dada se evaluará como “s1 == s2 es:abc” == “abc”, es decir, falso.
11. ¿Cuál será la salida de las siguientes instrucciones?
String s = "Java"+1+2+"Quiz"+""+(3+4);
System.out.println(s);
A. Java3Quiz7
B. Java12Quiz7
C. Java12Quiz34
D. Java3Quiz34
Click to Reveal Answer
Respuesta correcta: B
Primero, se ejecuta la expresión entre paréntesis. Luego, se ejecutan todos los operadores +, por lo que se ejecutan de izquierda a derecha.
Obtenemos una cadena con cada concatenación, por lo tanto, la salida se produce de la siguiente manera.
“Java”+1+2+”Quiz”+””+(3+4)
= “Java”+1+2+”Quiz”+””+7
= “Java1″+2+”Quiz”+””+7
= “Java12″+”Quiz”+””+7
= “Java12Quiz”+””+7
= “Java12Quiz”+7
= “Java12Quiz7”
12. ¿Cuántos objetos String se crean en las siguientes instrucciones?
String s = "abc"; // statement 1
String s1 = new String("abcd"); // statement 2
A. 1
B. 2
C. 3
D. 4
Click to Reveal Answer
Respuesta correcta: C
En la instrucción 1, se crea “abc” en el pool de cadenas.
En la declaración 2, primero se crea “abcd” en el pool de cadenas. Luego se pasa como argumento al operador String new y otra cadena se crea en la memoria heap.
Por lo tanto, se crean un total de 3 objetos de cadena.
13. ¿Cuál será la salida de las siguientes declaraciones?
String s1 = "abc";
String s2 = new String("abc");
System.out.print(s1==s2);
System.out.println(s1==s2.intern());
A. falsetrue
B. falsefalse
C. truetrue
D. truefalse
Click to Reveal Answer
Respuesta Correcta: A
La s1 está en el pool de cadenas mientras que s2 se crea en la memoria heap.
Por lo tanto, s1==s2 devolverá falso.
Cuando se llama al método s2.intern()
, comprueba si hay alguna cadena con el valor “abc” en el pool. Así que devuelve la referencia de s1. Así que tanto s1 como s2 están apuntando a la misma instancia de cadena ahora.
Por lo tanto, s1==s2.intern() devolverá verdadero.
14. Selecciona todas las interfaces implementadas por la clase String.
A. Serializable
B. Comparable
C. Constable
D. Cloneable
Click to Reveal Answer
Respuesta Correcta: A, B, C
String es serializable y comparable. Constable es una nueva interfaz de la versión Java 12.
15. Selecciona todas las razones que hacen que String sea el candidato perfecto para la clave de Map.
A. String is immutable
B. String is final
C. String properly implements hashCode() and equals() method
C. String hashcode is cached
Click to Reveal Answer
**Respuesta Correcta: A, B, C
**
La implementación correcta de los métodos hashCode() y equals() es imprescindible para una clave de Map. Dado que la cadena es final e inmutable, no hay posibilidades de corrupción de los datos de la clave.
16. ¿Cuál será la salida del siguiente fragmento de código?
String s1 = new String("java");
String s2 = new String("JAVA");
System.out.println(s1 = s2);
A. JAVA
B.java
C. true
D. false
Click to Reveal Answer
**Respuesta Correcta: A
**
Imprimirá “JAVA” porque el argumento dentro del método println() es una asignación. Por lo tanto, será tratado como System.out.println("JAVA")
.
17. ¿Cuál será la salida de las siguientes declaraciones?
String s1 = "abc";
StringBuffer s2 = new StringBuffer(s1);
System.out.println(s1.equals(s2));
A. false
B. true
C. ClassCastException at runtime
D. Compile-time error
Click to Reveal Answer
Respuesta correcta: A
Imprimirá falso porque s2 no es de tipo String. Si observas la implementación del método equals() de String, encontrarás una comprobación utilizando el operador instanceof
para verificar si el tipo del objeto pasado es String. Si no lo es, entonces devuelve falso.
18. ¿Cuál será la salida del siguiente fragmento de código?
String s1 = "abc";
String s2 = new String("abc");
s2.intern();
System.out.println(s1 == s2);
A. false
B. true
C. null
Click to Reveal Answer
Respuesta correcta: A
Es una pregunta tramposa y la salida será falsa. Sabemos que el método intern() devolverá la referencia del objeto String desde el pool de cadenas, pero como no lo asignamos de vuelta a s2, no hay cambio en s2. Por lo tanto, tanto s1 como s2 tienen una referencia diferente.
Si cambiamos el código en la línea 3 a s2 = s2.intern();
entonces la salida será verdadera.
19. Selecciona todas las clases que extienden la clase String.
A. StringBuffer
B. StringBuilder
C. StringWriter
D. None
Click to Reveal Answer
**Respuesta correcta: D
**
Es una pregunta tramposa. String es una clase final, por lo que no puedes extenderla.
20. ¿Cuáles de las siguientes afirmaciones son verdaderas sobre String en Java?
A. We can extend String class like StringBuffer does it.
B. String class is defined in java.util package.
C. String is immutable in Java.
D. String is thread-safe in Java.
E. String is case sensitive in Java.
Click to Reveal Answer
Respuesta correcta: C, D, E
No podemos extender la clase String porque es final. StringBuffer no la extiende. La clase String está definida en el paquete java.lang
. La cadena es inmutable y, por lo tanto, segura para subprocesos en Java. La cadena distingue entre mayúsculas y minúsculas, por lo que “abc” no es igual a “ABC”.
21. ¿Cuál será la salida de las siguientes declaraciones?
String s1 = null;
System.out.print(s1); // line 2
System.out.print(s1.toString()); // line 3
A. nullnull
B. null followed by NullPointerException
C. NullPointerException
Click to Reveal Answer
Respuesta correcta: B
La línea 2 imprimirá null
porque el método print
tiene una comprobación de nulidad así:
if (s == null) { s = "null";}
La línea 3 lanzará NullPointerException porque estamos intentando invocar la función toString() en null.
Conclusión
I have tried to cover most of the important points about String in this Quiz. If you think some interesting concept has been missed, please let me know through comments. If you liked the Quiz, share it with others too.
Source:
https://www.digitalocean.com/community/tutorials/java-string-quiz