Red de conocimiento informático - Problemas con los teléfonos móviles - Descripción del código fuente de la clase String (I): variables miembro y constructores

Descripción del código fuente de la clase String (I): variables miembro y constructores

La clase String representa cadenas, y todas las cadenas de la forma "abc" (o cadenas mágicas) se consideran instancias de esta clase.

La cadena es inmutable, su valor no cambia cuando se crea una cadena en el grupo constante.

Ruta: \java\lang\String.java

Para garantizar que la clase String sea una clase inmutable, la mayoría de las variables miembro de la clase String son privadas e inmutables. .

Donde se usa serialPersistentFields en la serialización:

La clase JDK8 String a*** tiene 16 constructores, dos de los cuales son @Deprecated, uno es privado y los 13 restantes son invocables.

El constructor sin parámetros asigna directamente el valor de "" al valor de la clase actual. "" es un carácter vacío [] de longitud 0. Llamar al método isEmpty() de un objeto String con un constructor sin parámetros devolverá verdadero, llamar al método length() devolverá 0 y probarlo == null devolverá falso.

Cuando el parámetro de entrada es un objeto de cadena, el constructor obtendrá su valor directamente.

Cuando el parámetro de entrada es una matriz de cadenas, el constructor llama al método Arrays.copyOf().

Entre ellos, el método Arrays.copyOf() copia en profundidad la secuencia de cadenas de los parámetros de entrada en this.value. Su código fuente es:

Entre ellos, System.arraycopy. método () El código fuente es:

Este método permite descubrir la parte que debe asignarse a this.value pasando directamente la cadena principal, el desplazamiento y la longitud efectiva de la cadena que se generará, y luego llama al método Arrays.copyOfRange() para realizar una copia profunda.

Cuando necesites convertir una secuencia codificada Unicode en una cadena, puedes usar el siguiente constructor:

Cuando necesites convertir bytes[] en una cadena, puedes usar el siguiente constructor:

Hay muchos constructores que encapsulan aún más los constructores anteriores. La esencia de estos constructores son parámetros de entrada simplificados. Además, el constructor de la clase String admite el paso tanto de StringBuffer como de StringBuilder. Si se pasa un StringBuffer, el constructor lo bloqueará. Si se pasa un StringBuilder, no se bloqueará.

De hecho, el método toString() de StringBuffer y StringBuilder también llama al constructor de la clase String, y su implementación subyacente es, en última instancia, Arrays.copyOf().

Finalmente, la clase String también proporciona un método constructor protegido por tipo. En comparación con el constructor char[], este método tiene un parámetro compartido más, pero este parámetro no tiene ningún efecto real y solo se usa para distinguirlo de otros constructores. Cuando se llama a este constructor en la clase String:

Debido a la necesidad de mantener la inmutabilidad de la clase String, este constructor no puede exponerse al exterior.