Diagrama de texto largo de 8000 palabras Cadena, esta vez entiendo completamente

Java es uno de los lenguajes de programación más populares, es simple, seguro y robusto.

Cuando se prepara para una entrevista de Java, encontrará que en la mayoría de las entrevistas, las preguntas iniciales son sobre cadenas de caracteres de Java.

En este artículo, presentaré las 20 preguntas principales de la entrevista sobre Java Strings. Después de leer este artículo, podrá tratar fácilmente las preguntas de la entrevista relacionadas con Java String.

1. ¿Qué es String en Java? ¿Es un tipo de datos?

String es una clase definida en el paquete java.lang en Java. Puede asignar una secuencia de caracteres a una variable de cadena. Por ejemplo, String name = "Gaurav".

Además, String en Java no es un tipo de datos como int, char o long.

Cuando asigna una secuencia de caracteres a una variable de cadena, está creando un objeto de cadena.

Cada literal de cadena es una instancia de la clase String y su valor no se puede cambiar.

2. ¿Cuál es la diferencia entre cadenas en lenguaje C y cadenas en Java?

Si tu currículum incluye algo relacionado con el lenguaje C, pueden hacerte esta pregunta.

Las cadenas en Java y C son completamente diferentes.

En C, una cadena es una matriz de caracteres terminada en nulo.

En la imagen de abajo, muestro la estructura de una cadena en C y Java.

En Java, las cadenas son más abstractas.

La clase de cadena proviene del paquete java.lang y tiene muchos métodos predefinidos que los programadores pueden usar para operar en cadenas u obtener información sobre cadenas.

Por lo tanto, en Java, las cadenas tienen más funciones que C.

3. ¿Qué es la agrupación de cadenas en Java?

String pool es un tipo especial de memoria mantenida por la JVM.

Los grupos de cadenas se utilizan para almacenar objetos de cadena únicos.

Cuando asigna el mismo prefijo de cadena a diferentes variables de cadena, la JVM mantiene solo una copia del objeto de cadena en el grupo de cadenas, y la variable de cadena comenzará a hacer referencia a ese objeto de cadena.

He ilustrado la oración anterior en la imagen a continuación.

El propósito de mantener este tipo especial de memoria es la optimización de la memoria.

4. ¿Por qué las cadenas son inmutables?

En la mayoría de las entrevistas de Java, tendrá preguntas como esta.

¿Por qué crees que los diseñadores del lenguaje Java mantuvieron las cadenas inmutables?

Si asigna la misma notación literal de cadena a muchas variables de cadena, la JVM mantendrá solo una copia del objeto de cadena en el grupo de cadenas de Java, y esas variables comenzarán a hacer referencia a ese objeto de cadena.

Si nadie le ha preguntado acerca de la agrupación de cadenas antes de esta pregunta, ¿podría brindarnos algunos antecedentes sobre el concepto de agrupación de cadenas en Java? Por favor refiérase a la pregunta anterior.

Además, otra razón es la seguridad. Sabemos que casi todos los programas de Java contienen cadenas, que se utilizan para almacenar datos importantes, como nombres de usuario y contraseñas. Por lo tanto, no debe cambiarse en el medio. De lo contrario, surgirán problemas de seguridad.

5. ¿Cuántos objetos creará el siguiente código?

String firstString = "Gaurav";
String secondString = "Gaurav";
String thirdString =  new String("Gaurav");

Al ver el código anterior, solo se crearán dos objetos de cadena. Las dos primeras variables se referirán al mismo objeto de cadena con el valor "Gaurav". JVM utiliza el concepto de grupo de cadenas para almacenar solo una copia de objetos de cadena repetidos en el grupo de constantes de cadena.

Sin embargo, cuando usamos la newpalabra clave para crear una nueva cadena, se creará un nuevo objeto de cadena y se almacenará en la memoria del montón de Java.

Entonces, para la tercera variable ThirdString, se creará y almacenará un nuevo objeto de cadena en el espacio de almacenamiento dinámico de Java.

Por lo tanto, habrá dos objetos en total, uno del grupo de cadenas de Java y otro de la memoria del montón de Java.

A continuación, he mostrado estos dos objetos en la imagen de abajo.

6.  intern()¿Qué hace el método?

intern()El método se utiliza para agregar manualmente una copia única del objeto de cadena al grupo de cadenas de Java.

Sabemos que cuando creamos una cadena con la nueva palabra clave, se almacenará en la memoria del montón.

Podemos intern()almacenar una copia única de ese objeto de cadena en el grupo de cadenas de Java usando métodos.

Cuando hace algo como esto, la JVM verifica si existe un objeto de cadena con el mismo valor en el grupo de cadenas.

Si existe un objeto de cadena con el mismo valor, la JVM simplemente proporcionará una referencia a ese objeto a la variable de cadena correspondiente.

Si no hay ningún objeto de cadena con el mismo valor en el grupo de cadenas, la JVM crea un objeto de cadena con el mismo valor en el grupo de cadenas y devuelve su referencia a la variable de cadena.

7. ¿Cuál es la diferencia entre String y StringBuffer?

String es una clase final en Java, String es inmutable, lo que significa que ya no podemos cambiar el valor del objeto String.

Dado que las cadenas se usan ampliamente en las aplicaciones, tenemos que realizar múltiples operaciones en los objetos de cadena. Cada vez que se genera un nuevo objeto String, todos los objetos anteriores se convierten en objetos basura, lo que ejerce presión sobre el recolector de basura.

Por lo tanto, el equipo de Java presentó la clase StringBuffer. Es un objeto String mutable, lo que significa que puede cambiar su valor.

Las cadenas son inmutables, pero los StringBuffers son mutables.

8. ¿Cuál es la diferencia entre StringBuffer y StringBuilder?

Sabemos que las cadenas son inmutables en Java. Pero con StringBuffer y StringBuilder, puede crear objetos de cadena editables.

Cuando el equipo de Java se dio cuenta de la necesidad de objetos de cadena editables, introdujeron la clase StringBuffer. Pero todos los métodos de la clase StringBuffer están sincronizados.

Esto significa que solo un subproceso puede acceder a un método de StringBuffer al mismo tiempo.

Por lo tanto, lleva más tiempo.

Más tarde, el equipo de Java se dio cuenta de que no era una buena idea sincronizar todos los métodos de la clase StringBuffer, por lo que introdujeron la clase StringBuilder.

Todos los métodos de la clase StringBuilder no están sincronizados.

Dado que todos los métodos de la clase StringBuffer están sincronizados, StringBuffer es seguro para subprocesos, más lento y menos eficiente que StringBuilder.

Dado que ninguno de los métodos de la clase StringBuilder está sincronizado, StringBuilder no es seguro para subprocesos en comparación con StringBuffer, pero es más rápido y eficiente que StringBuffer.

9. ¿Podemos usar ==operadores para comparar cadenas? ¿Cuáles son los riesgos?

La respuesta es sí, podemos usar ==operadores para comparar cadenas.

Sin embargo, cuando ==comparamos cadenas usando operadores, estamos comparando sus referencias de objetos ya sea que esas variables de cadena apunten o no al mismo objeto de cadena.

La mayoría de las veces, los desarrolladores quieren comparar el contenido de las cadenas, pero por error usan ==operadores para comparar cadenas cuando deberían usar equals()métodos, lo que genera un error.

A continuación, presento un programa que compara comparaciones de cadenas usando ==operadores y equals()métodos.

publicclass StringCompareUsingEqualsOperator {
 
 public static void main(String[] args) {
 
 String firstString = "Gaurav";
 String secondString = "Gaurav";
 
 String thirdString =  new String("Gaurav");
 
 System.out.print("Case 1 : ");
 System.out.println(firstString == secondString); // true
 
 System.out.print("Case 2 : ");
 System.out.println(firstString == thirdString); // false
 
 // Comparing strings using equals() method
 System.out.print("Case 3 : ");
 System.out.println(firstString.equals(thirdString)); // true
 }
 
}

La salida del programa anterior es la siguiente:

Case 1 : true
Case 2 : false
Case 3 : true

En el 'Caso 1', usamos el operador de equivalencia (==) para comparar firstString y secondString, que se imprime como verdadero porque ambas variables apuntan al mismo objeto de cadena.

En el 'Caso 2', usamos el operador de equivalencia (==) para comparar la primeraCadena y la terceraCadena, que imprime falso ya que ninguna de las variables apunta al mismo objeto de cadena.

Puede ver que para ThirdString usamos la nueva palabra clave que crea un nuevo objeto en la memoria del montón de Java.

En el "Caso 3", comparamos firstString y thirdString usando el método equals(). Aunque los dos son objetos de cadena diferentes, su contenido es el mismo, por lo que se imprime verdadero.

10. ¿Cuáles son las formas de comparar cadenas?

Podemos usar equals()métodos, ==operadores y compareTo()métodos para comparar cadenas.

Cuando comparamos cadenas usando el método equals(), estamos comparando los contenidos de las cadenas para ver si estas cadenas tienen el mismo contenido.

Cuando comparamos cadenas usando el operador ==, estamos comparando referencias a cadenas, es decir, si estas variables apuntan al mismo objeto de cadena.

Además, podemos comparar cadenas alfabéticamente (comparar cadenas alfabéticamente). Podemos usar el método compareTo() para comparar cadenas en orden alfabético.

El método compareTo() devuelve un entero negativo, 0, o un entero positivo.

firstString.compareTo(secondString)

Si firstString es menor que secondString, devolverá un entero negativo, es decir, firstString < secondString → devolverá un entero negativo.

Si firstString es igual a secondString, devolverá 0, es decir, firstString == secondString → devuelve 0.

Si primeraCadena es mayor que segundaCadena, devolverá un entero positivo, es decir, primeraCadena > segundaCadena → devuelve un entero positivo.

11. ¿Cuál es el propósito del método substring()?

El método substring() en Java devuelve una subcadena de la cadena especificada.

La creación de la subcadena depende de los argumentos pasados ​​al método substring().

El método Substring se puede utilizar de dos maneras:

  • subcadena(int índiceInicio)

  • subcadena(int índiceInicio, int índiceFin)

En el primer método, solo damos el parámetro beinIndex, mientras que en la segunda variante, damos tanto beginIndex como endIndex.

Para la primera variante, la subcadena se tomará desde beginIndex (inclusive) hasta el último carácter de la cadena.

Para la segunda variante, la subcadena se tomará de beginIndex (inclusive) a endIndex (exclusivo).

Consulte la figura a continuación para comprender el método substring().

En la primera imagen, se usa el primer uso de substring().

String name = "Gaurav Kukade";
String result = name.substring(4);
 
System.out.println(result);

En la segunda imagen, tengo un segundo uso del método substring().

String name = "Gaurav Kukade";
String result = name.substring(4, 9);
 
System.out.println(result);

12. ¿Cómo verificar si una cadena está vacía?

La clase Java String tiene un método especial para verificar si la cadena está vacía.

isEmpty()El método verifica si la longitud de la cadena es cero, si es cero, lo que significa que la cadena está vacía, el método isEmpty() devolverá verdadero.

Si la longitud de la cadena no es cero, el método isEmpty() devolverá falso.

13. ¿Qué es el método format() en Java String? ¿Cuál es la diferencia entre el método format() y el método printf()?

El método format() y el método printf() dan formato a cadenas.

La única diferencia es que el método format() devuelve una cadena formateada, mientras que el método printf() imprime la cadena formateada.

Por lo tanto, cuando desee utilizar cadenas formateadas en un programa, puede utilizar el método de formato.

Y cuando desee imprimir la cadena formateada directamente, puede usar el método printf().

14. ¿String es "seguro para subprocesos" en Java?

Sí, las cadenas son seguras para subprocesos.

Como sabemos, en Java, las cadenas son inmutables. Esto significa que una vez que hemos creado una cadena, ya no podemos modificarla.

Por lo tanto, no hay problema de que varios subprocesos accedan a un objeto de cadena.

15. ¿Por qué se usan cadenas como claves HashMap en la mayoría de los casos?

Esta cadena es inmutable. Entonces, una cosa está arreglada, una vez que se crea, no se cambiará.

Por lo tanto, el código hash calculado se puede almacenar en caché y utilizar en el programa.

Esto nos ahorrará el esfuerzo de calcular el código hash una y otra vez, por lo que las cadenas se pueden usar de manera más eficiente que otros objetos clave de HashMap.

16. ¿Se puede convertir String a Int y viceversa?

Sí, puede convertir cadenas a int y viceversa.

Puede convertir cadenas en enteros utilizando el método valueOf() y el método parseInt() de la clase Integer.

Además, puede usar el método valueOf() de la clase String para convertir números enteros en cadenas.

A continuación, he proporcionado un programa que muestra la conversión de cadenas a enteros y de enteros a cadenas.

publicclass Conversion{
 public static void main(String [] args){
 
 String str = "1254";
 
 int number = 7895;
 
 // convert string to int using Integer.parseInt() method
 int parseIntResult1 = Integer.parseInt(str);
 
 // convert string to int using Integer.valueOf() method
 int valueOfResult1 = Integer.valueOf(str);
 
 System.out.println("Converting String to Integer:");
 System.out.println("Using the Integer.parseInt() method : "+parseIntResult1);
 System.out.println("Using the Integer.valueOf() method : "+valueOfResult1);
 
 System.out.println("\n");
 // convert integer to string using String.valueOf() method
 String valueOfResult2 = String.valueOf(number);
 
 System.out.println("Converting Integer to String :");
 System.out.println("Using the String.valueOf() method : "+valueOfResult2);
 
 }
}

La salida del programa anterior es la siguiente:

Converting String to Integer:
Using the Integer.parseInt() method : 1254
Using the Integer.valueOf() method : 1254
 
 
Converting Integer to String :
Using the String.valueOf() method : 7895

17. ¿Qué es el método split()?

El método de división se utiliza para dividir la cadena de acuerdo con la expresión regular proporcionada.

Este método devolverá una matriz que divide las subcadenas:

publicclass SplitExample {
 
 public static void main(String[] args) {
 String name = "My, name, is ,Gaurav!";
 
 String [] substringArray = name.split(",");
 
 for(String substring : substringArray) {
 System.out.print(substring);
 }
 }
}

La entrada al programa anterior es:

My name is Gaurav!

18. ¿Cuál es la diferencia entre "Gaurav Kukade".equals(str) y str.equals("Gaurav Kukade")?

Ambos tienen el mismo aspecto, verificará si el contenido de la variable de cadena str es igual a la cadena "Gaurav Kukade".

Pero son diferentes cuando la variable de cadena str = null.

El primer fragmento de código devolverá false, pero el segundo fragmento de código generará NullPointerExpection.

A continuación, he proporcionado un programa que compara dos formas de cadenas utilizando el método equals().

publicclass StringExample {
 
 public static void main(String[] args) {
 
 String str = "Gaurav Kukade";
 
 System.out.println("Gaurav Kukade".equals(str)); // true
 
 System.out.println(str.equals("Gaurav Kukade")); // true
 } 
}

La entrada al programa anterior es:

true
true

En ambas ocasiones imprime verdadero porque el contenido de ambas cadenas es igual.

Ahora, examinaremos un programa donde str=null:

publicclass StringNullExample {
 
 public static void main(String[] args) {
 
 String str = null;
 
 System.out.println("Gaurav Kukade".equals(str)); // false
 
 System.out.println(str.equals("Gaurav Kukade")); // NullPointerException
 }
}

La entrada al programa anterior es:

false
Exception in thread "main" java.lang.NullPointerException
 at StringNullExample.main(StringNullExample.java:14)

Podemos ver el resultado anterior, para el primer fragmento de código está imprimiendo falso pero para el segundo fragmento de código está lanzando NullPointerException.

Este es uno de los consejos más importantes para evitar excepciones de puntero nulo en cadenas de Java.

19. En Java, ¿podemos usar una cadena en caso de cambio?

Sí, desde Java 7, podemos usar String en caso de cambio.

A continuación, doy un programa que muestra el uso de cadenas en el caso del interruptor.

publicclass StringInSwitchExample  
{ 
    public static void main(String[] args) 
    { 
        String str = "two"; 
        switch(str) 
        { 
            case"one": 
                System.out.println("January"); 
                break; 
            case"two": 
                System.out.println("February"); 
                break; 
            case"three": 
                System.out.println("March"); 
                break; 
            default: 
                System.out.println("Invalid month number"); 
        } 
    } 
}

La entrada al programa anterior es:

February

¿Cómo usar el operador + para la concatenación de cadenas en Java?

El operador + es el único operador sobrecargado que puede usar para sumar dos números y también para concatenar cadenas.

Si está utilizando Java versión 1.5 o superior, la concatenación de cadenas utiliza internamente el método append() de StringBuilder. Para versiones inferiores a la 1.5, utiliza el método append() de la clase StringBuffer.


Hola a todos, mi nombre es Jackpop. Me gradué del Instituto de Tecnología de Harbin con una maestría. He trabajado en grandes fábricas como Huawei y Ali. Si tiene dudas sobre la educación superior, el empleo y la mejora técnica, es posible que desee hacer amigos:

¡Soy Jackpop, seamos amigos! icono-predeterminado.png?t=M276https://mp.weixin.qq.com/s/fCHn8JpLQDH-M_QkVxwR1w

Supongo que te gusta

Origin blog.csdn.net/jakpopc/article/details/124067676
Recomendado
Clasificación