Maison  >  Article  >  Java  >  Introduction aux raisons de l'immuabilité de String

Introduction aux raisons de l'immuabilité de String

不言
不言avant
2019-03-23 11:17:112878parcourir

Le contenu de cet article est une introduction aux raisons de l'immuabilité de String. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Dans l'interview à Maoyan, l'intervieweur a demandé pourquoi les chaînes String sont inchangées. Ma réponse à ce moment-là était que la classe String avait été modifiée avec le mot-clé final. Lorsqu'on m'a demandé pourquoi elle était immuable lorsqu'elle était modifiée avec final, j'ai trouvé que ce que j'avais dit n'avait aucun sens. Ensuite, j'ai spécifiquement vérifié pourquoi.

L'invariance de String, comme le montre la figure ci-dessous, lorsque vous modifiez s, s pointe vers un nouvel objet et l'objet d'origine ne change pas.

Introduction aux raisons de limmuabilité de String

Regardez comment le code source est implémenté :

Introduction aux raisons de limmuabilité de String

On voit que String est défini comme final, donc String Ce n'est pas héritable. Nous voyons ensuite que l'implémentation interne de String est un tableau de caractères et est définie comme finale. À l'heure actuelle, certaines personnes peuvent penser que le champ modifié final ne peut pas être modifié après sa création, donc c'est terminé, mais ce n'est pas le cas.

Car bien que la valeur soit immuable, seule l'adresse de référence de la valeur est immuable. Mais le tableau Array auquel il fait référence est mutable.

final int[] value={1,2,3};
value[2]=100;  //这时候数组里已经是{1,2,100}

Donc, fondamentalement, la raison pour laquelle String est immuable est que les ingénieurs de Sun ont très bien encapsulé le tableau de valeurs et ne modifient pas le tableau de valeurs dans toutes les méthodes, le définissent comme privé et mettent Set the Chaîne entière en final et interdire l'héritage pour éviter d'être détruit par d'autres après l'héritage. La clé de l’immuabilité de String n’est donc pas le rôle de final.

Dans le même temps, afin d'éviter de prendre beaucoup de place en raison de l'immuabilité de String, les rédacteurs Java ont conçu un pool de constantes de chaînes

String one = "someString";
String two = "someString";

Introduction aux raisons de limmuabilité de String

Cet article L'article est partout ici. Pour plus d'autres contenus passionnants, vous pouvez faire attention à la colonne Java Video Tutorial du site Web PHP chinois !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer