2012-01-18 3 views
1

Il existe des types immuables dans Java. Et si vous passez un objet immuable à une méthode, il ne sera pas changé après l'appel de cette méthode même si sa valeur a été modifiée dans cette méthode. Je sais que toutes les primitives sont immuables. Et String est immuable aussi.
J'ai écrit un code simple pour vérifier cette fonctionnalité dans Java et il semble que les classes wrapper pour les primitives sont également immuables. Quelqu'un peut-il lister tous les types immuables dans Java?Tous les types immuables dans Java

+3

Les primitives ne sont pas immuables. Le fait qu '«ils ne changent pas après les avoir transmis à une méthode» est parce qu'ils sont passés en valeur, non parce qu'ils sont immuables. – amit

+0

Question similaire: http://stackoverflow.com/questions/5124012/examples-of-immutable-classes – Azodious

+0

quelle serait la raison de connaître cette liste? – Dapeng

Répondre

4

il ne sera pas modifié après avoir appelé cette méthode, même si sa valeur a été modifiée dans cette méthode

n'a rien à voir avec immuable.

void change(SomeType st) { 
    st.setValue(123); 
} 

va changer la réalité. Alors que

void change(SomeType st) { 
    st = new SomeType(123); 
} 

ne sera pas. La différence ici est de savoir si vous modifiez la référence ou si vous opérez sur l'objet référencé.

La chaîne et la classe wrapper sont appelées immuables car il n'y a absolument aucune fonction membre comme setValue qui pourrait changer cet objet.

J'espère que vous comprenez cela. Vous pouvez commenter et demander librement si vous avez plus de doute.

+0

J'ai compris, merci beaucoup. – shift66

-1

Toute classe destinée à contenir une valeur primitive fournie dans jdk doit transmettre cette liste.

Exemple - Entier, Long, Double, Chaîne et ainsi de suite.

+0

En Java, les types primitifs sont énumérables: byte, short, int, long, char, float, double, bool. Primitive et immuable sont deux choses totalement différentes. – Haozhun

+0

@Gene, Vous avez mal compris la déclaration. Toute classe est une représentation de valeurs primitives ... J'espère que vous comprenez maintenant. –

+0

Je n'ai toujours pas compris. Excusez-moi. Cependant, la downvote est verrouillée en raison de timeout et je ne peux pas le changer maintenant. Pardon. – Haozhun

1

Non, c'est impossible.

Tout le monde peut ajouter ses propres types immuables et je suis assez sûr que chaque version de java introduit quelques nouvelles

+0

Oui, je sais, j'ai cherché dans google. Je veux connaître tous les types immuables connus. Par exemple Integer. Tout le monde peut utiliser ce type. Il semble que l'URI soit immuable aussi. Est-ce que c'est juste? – shift66

+0

@Ademiban: Où cela se termine-t-il? Tout le monde peut aussi utiliser les communs Apache, est-ce que les immutables devraient aussi être listés?> – amit

+0

javadoc a toutes ces informations. de l'URI javadoc: Les instances de cette classe sont immuables. donc oui URI est immuable – Peter

Questions connexes