Différence entre final et immuable en Java

Quelle est la différence entre final et immuable en Java?

J'ai récemment eu l'occasion d'utiliser la liste des immuables de Guava. Quelle est la différence entre immuable et final? Je me posais la question et je l'ai examiné.

Caractéristiques d'immuable

-Interdit de changer la valeur de l'objet lui-même ・ Il est possible de changer la destination de référence

Caractéristiques de la finale

・ Il est interdit de changer la destination de référence ・ Il est possible de changer la valeur de la variable elle-même

Maintenant, en Java, vérifions en utilisant String et Mutable StringBuilder typiques d'Immutable.

class Main
{
	public static void main (String[] args) throws java.lang.Exception
	{
		 final String str = "apple";
		 final StringBuilder sb= new StringBuilder("ringo");
		
 		str = str + "ringo"; //Erreur de compilation. De chaîne+Accompagné du changement de la destination de référence.
                String s = "ringo";
                str = s;             //Erreur de compilation
		sb.append("apple");
		sb = new StringBuilder("ringo"); ///Erreur de compilation. Modifiez la destination de référence.
		System.out.println(str);
		System.out.println(sb);
	}
}

C'est relativement simple comparé de cette façon, mais j'ai mal compris que la valeur de final était invariante, et étonnamment il n'y avait pas d'article japonais, alors je l'ai écrit.

Recommended Posts

Différence entre final et immuable en Java
[Java] Différence entre "variable finale" et "objet immuable"
[Java] Différence entre statique final et final dans les variables membres
Différence entre int et Integer en Java
[Java] Différence entre == et égal
Différence entre next () et nextLine () dans Java Scanner
[Java] Différence entre Hashmap et HashTable
[JAVA] Différence entre abstrait et interface
[Java] Différence entre array et ArrayList
[Java] Différence entre fermable et fermable automatiquement
[Java] Différence entre StringBuffer et StringBuilder
[Java] Différence entre longueur, longueur () et taille ()
L'évaluation des courts-circuits est-elle vraiment rapide? Différence entre && et & en Java
Différence entre pop () et peek () dans la pile
[Pour les débutants] Différence entre Java et Kotlin
Différence entre getText () et getAttribute () de Selenium
Différence entre "|| =" et "instance_variable_defined?" Dans Ruby memo
Différence entre les listes d'arry et les listes liées en Java
Différence entre EMPTY_ELEMENTDATA et DEFAULTCAPACITY_EMPTY_ELEMENTDATA dans ArrayList
[Java] Différence entre la plage Intstream et la plageClosed
Différence entre vh et%
Différence entre i ++ et ++ i
[Java] Comprendre la différence entre List et Set
Distinguer les nombres positifs et négatifs en Java
Comprendre la différence entre int et Integer et BigInteger en java et float et double
Différence entre produit et variante
[Java] Différence entre equals et == dans une chaîne de caractères qui est un type de référence
Différence entre redirect_to et render
Différence entre redirect_to et render
Différences entre les classes et les instances dans Ruby
Différence entre nouveau et créer dans le contrôleur d'action Rais
Différence entre CUI et GUI
Différence entre les variables et les variables d'instance
Différence entre mockito-core et mockito-all
[JAVA] Quelle est la différence entre interface et abstract? ?? ??
Différence entre classe et instance
Différence entre l'installation de bundle et de bundle
Différence entre ArrayList et LinkedList
Différence entre render et redirect_to
Différence entre List et ArrayList
java Generics T et? Différence
Différence entre .bashrc et .bash_profile
Différence entre StringBuilder et StringBuffer
Différence entre render et redirect_to
[Java débutant] Différence entre la longueur et la longueur () ~ Je ne sais pas ~
Différence entre Java et JavaScript (comment trouver la moyenne)
Différence entre l'élément 0, le caractère nul et le caractère vide (liste de contrôle)
[Java] Différence entre l’affectation d’une variable de type de base et l’affectation d’une variable de type de référence
[Java] Vérifiez la différence entre orElse et orElseGet avec IntStream
Pensez aux différences entre les fonctions et les méthodes (en Java)
Différences dans la gestion des chaînes entre Java et Perl
[Java] Différence entre l'erreur de débordement de pile et l'erreur de mémoire insuffisante
[Ruby] Différence entre obtenir et publier
Différence entre la méthode d'instance et la méthode de classe
Différence entre interface et classe abstraite