variable modificador method java string variables final

modificador - private final java



Cadena y Final (6)

"final" significa cosas diferentes en los dos casos.

La clase java.lang.String es final. Esto significa que no puedes heredar de él.

La variable "nombre" es definitiva, lo que significa que no puede cambiarla para apuntar a una instancia diferente de Cadena. Entonces, una variable String no final no es una constante, porque podrías leerla en dos momentos diferentes y obtener diferentes valores.

Da la casualidad que los objetos de cadena Java también son inmutables. Esto significa que no puede modificar el valor que representa un objeto String en particular. Compare esto con una matriz: puede reemplazar el primer elemento de un objeto de matriz con un objeto diferente, pero no puede reemplazar el primer carácter de un objeto de cadena con un char diferente. Es por esto que String.replace () devuelve una nueva cadena - no puede modificar la anterior.

Una de las razones por las que String es definitiva es evitar que se pase una instancia de una subclase de String, que implementa un comportamiento mutable, en lugar de una String.

Pero si puede modificar un objeto en particular y si puede asignar un objeto diferente a una variable, son conceptos completamente diferentes. Uno es una propiedad de objetos String, y el otro es una propiedad de variables String, que son referencias a objetos String.

¿Cuál es la diferencia en las siguientes afirmaciones?

String name = "Tiger"; final String name ="Tiger";

Aunque la clase String es final clase final , ¿por qué necesitamos crear una variable String "CONSTANTE" como final?



Estás confundiendo inmutable con final.

String, como Integer y Long, es una clase inmutable en la que los datos internos están protegidos de la modificación mediante encapsulación.

Sin embargo, como dijo Ayman, final se refiere al puntero a la cadena.


Recuerde que la palabra clave final de Java tiene dos propósitos en este caso:

  • significa que la referencia no puede establecerse en otra cadena; es decir, no puede hacer "nombre = ...";
  • pero, lo que es más importante, significa que la referencia se ha publicado correctamente en otros hilos (ver el artículo vinculado para más detalles, o trabajos como Goetz y otros, "Concurrencia de Java en la práctica").

Si una variable se marca como final , el valor de esa variable no se puede cambiar, es decir, la palabra clave final cuando se usa con una variable la convierte en una constante. Y si intenta cambiar el valor de esa variable durante el curso de su programa, el compilador le dará un error.

NOTA: Si marca una variable de un tipo de referencia como final, esa variable no puede hacer referencia a ningún otro objeto. Sin embargo, puede cambiar el contenido del objeto, porque solo la referencia en sí es definitiva.

FUENTE: Palabra clave final en Java


final en este contexto significa que el name la variable solo se puede asignar una vez. Asignarle un objeto String diferente nuevamente genera un error de compilación.

Creo que la fuente de la confusión aquí es que la palabra clave final se puede usar en varios contextos diferentes:

  • clase final: la clase no se puede subclasificar.
  • método final: el método no puede ser anulado.
  • variable final: la variable solo se puede asignar una vez.

Consulte el artículo de Wikipedia sobre la final en Java para ver ejemplos de cada caso.