260 votes

Initialisation de plusieurs variables à la même valeur en Java

Je suis à la recherche d'une méthode propre et efficace pour déclarer plusieurs variables du même type et de la même valeur. Actuellement, j'ai :

String one = "", two = "", three = "" etc...

Mais je cherche quelque chose comme :

String one,two,three = ""

Est-il possible de faire cela en Java ? En gardant l'efficacité à l'esprit.

7 votes

Gardez l'efficacité à l'esprit L'efficacité de quoi ?

23 votes

Longueur du code, temps de frappe, visuellement simple. C'est ce que je veux dire. Je sais que réserver la mémoire, c'est réserver la mémoire et que cette question est liée à l'aspect "humain" des choses.

1 votes

Je dirais que cela va généralement à l'encontre des conventions Java acceptées, cela surprendra le lecteur et, à mon avis, c'est plus difficile à lire que de les déclarer sur des lignes séparées.

383voto

Alfredo Osorio Points 3808
String one, two, three;
one = two = three = "";

Cela devrait fonctionner avec des objets immuables. Cela n'a aucun sens pour les objets mutables par exemple :

Person firstPerson, secondPerson, thirdPerson;
firstPerson = secondPerson = thirdPerson = new Person();

Toutes les variables pointeraient vers la même instance. Ce dont vous auriez probablement besoin dans ce cas est :

Person firstPerson = new Person();
Person secondPerson = new Person();
Person thirdPerson = new Person();

Ou mieux encore, utilisez un tableau ou un Collection .

17 votes

Il y a des cas où cela a du sens pour les objets mutables également. Par exemple, dans le constructeur de l'implémentation de linkedlist où initialement : head = tail = new Node(value). Ainsi, head et tail doivent pointer vers la même référence.

0 votes

S'agit-il du même objet ? Si je fais plus tard one = "cat" sera two.equals("cat") retourner vrai ?

0 votes

La seule réserve est que cela ne fonctionnerait pas pour les variables statiques.

74voto

Michael Borgwardt Points 181658

Vous pouvez déclarer plusieurs variables, et initialiser plusieurs variables, mais pas les deux en même temps :

 String one,two,three;
 one = two = three = "";

Cependant, ce genre de chose (surtout les affectations multiples) serait mal vu par la plupart des développeurs Java, qui considéreraient que c'est la en face de de "visuellement simple".

32 votes

+1 pour avoir souligné que ce qu'il essaie de faire n'est pas la norme.

1 votes

C'est pour les chaînes de caractères, mais comment pour les entiers ? int jour, mois, année, heure, min = jour = mois = année = heure = 0 ; est-ce que c'est correct ? ?

27voto

99tm Points 19742

Non, ce n'est pas possible en Java.

Tu peux le faire de cette façon Mais essayer d'éviter il.

String one, two, three;
one = two = three = "";

14 votes

Pouvez-vous expliquer pourquoi il faut éviter cela ?

0 votes

@Lonely Neuron Je pense qu'il est facile de faire une erreur si vous l'utilisez de cette façon.

5 votes

@YuhangLin J'espérais juste une meilleure réponse.

22voto

Java Enthusiast Points 1740

Fonctionne pour les primitives et les classes immuables comme String classes de wrapper Caractère, Octet.

int i=0,j=2   
String s1,s2  
s1 = s2 = "java rocks"

Pour les classes mutables

Reference r1 = Reference r2 = Reference r3 = new Object();`  

Trois références + un objet sont créés. Toutes les références pointent vers le même objet et votre programme se comportera mal.

1 votes

Que voulez-vous dire par "mal se comporter" ? Il se comportera différemment de 3 objets initialisés séparément, mais cela dépend vraiment de ce que vous voulez

4 votes

Je ne suis pas d'accord avec "Toutes les références pointent vers le même objet et votre programme se comportera mal". Le seul problème est que ce qui arrive à l'objet d'une référence arrive à l'objet d'une autre référence -- parce que c'est le même objet. Ce n'est pas un mauvais comportement ; c'est la façon dont Java fonctionne.

2voto

RMT Points 3687

Je ne pense pas que ce soit possible, vous devez définir toutes les valeurs individuellement (comme le premier exemple que vous avez fourni).

Le deuxième exemple que vous avez donné n'initialisera que la dernière variable à "" et pas les autres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X