final vs Inmutabilidad en Java

final: en Java, final es un modificador que se usa también para clase, método y variable. Cuando una variable se declara con la palabra clave final, su valor no se puede modificar, esencialmente, una constante. 
Inmutabilidad : en términos simples, inmutabilidad significa inmutable en el tiempo extra o no poder cambiar. En Java, sabemos que los objetos String son inmutables, lo que significa que no podemos cambiar nada en los objetos String existentes.

Diferencias entre final e inmutabilidad

  • final significa que no puede cambiar la referencia del objeto para que apunte a otra referencia u otro objeto, pero aún puede mutar su estado (usando métodos setter, por ejemplo). Mientras que inmutable significa que el valor real del objeto no se puede cambiar, pero puede cambiar su referencia a otra.
  • el modificador final es aplicable a la variable pero no a los objetos, mientras que la inmutabilidad es aplicable a un objeto pero no a las variables.
  • Al declarar una variable de referencia como final, no obtendremos ninguna naturaleza de inmutabilidad, aunque la variable de referencia sea final. Podemos realizar cualquier tipo de cambio en el Objeto correspondiente. Pero no podemos realizar la reasignación de esa variable.
  • final asegura que la dirección del objeto permanezca igual mientras que Immutable sugiere que no podemos cambiar el estado del objeto una vez creado.
     

JAVA

// Java program to illustrate
// difference between final
// and immutability
 
class Geeks {
    public static void main(String[] args)
    {
        final StringBuffer sb = new StringBuffer("Hello");
 
        // Even though reference variable sb is final
        // We can perform any changes
        sb.append("GFG");
 
        System.out.println(sb);
 
        // Here we will get Compile time error
        // Because reassignment is not possible for final variable
        sb = new StringBuffer("Hello World");
 
        System.out.println(sb);
    }
}

Producción: 

Geeks.java:14: error: cannot assign a value to final variable sb
        sb = new StringBuffer("Hello World");
        ^
1 error

Representación pictórica del programa anterior

final vs Immutability

Explicación: en la imagen de arriba, podemos ver que estamos creando un objeto de la clase StringBuffer al hacer que la referencia sea final.

  • Declarar la variable de referencia como final no significa que el objeto sea inmutable.
  • En la siguiente línea, estamos realizando la operación append() en el objeto creado y se cambió con éxito.
  • Si el objeto es inmutable, entonces no se puede realizar la operación de agregar anterior.
  • Pero se ejecuta con éxito ya que declaramos la variable de referencia como final. final significa que no podemos reasignar nada a esa variable de referencia nuevamente.
  • Por lo tanto, cuando intentamos crear un nuevo objeto de StringBuffer, no creará un objeto arrojando un error a la consola.

Publicación traducida automáticamente

Artículo escrito por Bishal Kumar Dubey y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *