Maison >Java >javaDidacticiel >Analyse comparative des objets mutables et des objets immuables en Java
Les objets qui ne créent pas de nouveaux objets lorsque leurs attributs sont modifiés, tels que StringBuiler, peuvent considérer les chaînes qui y sont stockées comme des attributs lors de l'appel de StringBuilder.append(String str) pour ajouter. une chaîne, c'est Ceci est fait sur la base de l'objet StringBuilder existant et aucun nouvel objet n'est créé.
Les classes wrapper des types de données de base et les objets de presque toutes les classes à l'exception de la classe String sont des objets mutables.
Lorsque les propriétés sont modifiées, un nouvel objet doit être créé, tel que String. S'il existe déjà "String str='abc'", attribuez "str='efg'". à nouveau et créez une nouvelle chaîne. L'objet stocke "efg" et str pointe vers cet objet nouvellement créé.
Les classes wrapper des types de données de base et les objets de la classe String sont des objets immuables.
Les objets immuables représentent une zone stable en mémoire et plusieurs variables de référence pointant vers la même zone, lorsqu'une variable de référence tente de modifier le contenu de l'objet, elle ne modifiera pas le contenu de l'objet d'origine, mais créera un nouvel objet. Cela garantit la stabilité des données. Par conséquent, les objets immuables sont généralement utilisés dans les situations où les données sont nécessaires. pour rester stable.
Lors de la mise à jour des attributs d'un objet variable, aucun nouvel objet ne sera créé pour économiser de l'espace mémoire. Par conséquent, les objets variables sont principalement utilisés dans les situations où les attributs changent fréquemment, comme les compteurs. Il est nécessaire d'établir des objets statistiques et la relation cartographique entre les résultats statistiques est donc construite comme une collection Map. Les objets entiers sont des objets immuables et ne conviennent pas au stockage de résultats statistiques. Un objet mutable doit être utilisé pour stocker les résultats statistiques. Bien sûr, il peut également s'agir d'un objet personnalisé. Il existe un attribut int utilisé pour le comptage. :
public void test01() { String str = "abc efe hig klm nop qrs"; String[] arr = str.split(" "); HashMap<String, int[]> map = new HashMap<String, int[]>();for (String x : arr) {int[] count = map.get(x);if (count != null) count[0]++;elsemap.put(x, new int[] { 1 }); } }
Les objets immuables présentent plusieurs avantages :
1. L'allocation de mémoire est fixe et n'a pas besoin d'être étendue
2. peut copier plusieurs copies à volonté, différentes Il n'est pas nécessaire de verrouiller ou de déverrouiller entre les threads
Il s'agit de la fonctionnalité "variable inchangée" dans la programmation fonctionnelle. Bien entendu, la programmation fonctionnelle présente d’autres avantages, comme la clarté du code, etc., mais c’est une question d’opinion.
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!