Salut tous le monde,
Pourquoi assez souvent on utilise final avec les parametres d'une methodes?
Par exemple
MerciCode:
1
2
3
4 public int methode(final String a, final String b){ //do some thing return 2; }
Version imprimable
Salut tous le monde,
Pourquoi assez souvent on utilise final avec les parametres d'une methodes?
Par exemple
MerciCode:
1
2
3
4 public int methode(final String a, final String b){ //do some thing return 2; }
J'ai rarement vu ca dans les paramètres d'une méthode enfin bon ...Citation:
Envoyé par menzlitsh
Final permet d'indiquer que ta variable n'est pas modifiable.
Ca gagne en principe de la place en mémoire ( surtout pour les Strings puisque ton tableau de char ne changera pas de taille) ( Mais bon là ca reste à vérifier)
C'est juste que c'est plus propre mais je n'en vois pas particulierement l'interet ...
L'intérêt est que des fois, tu passes un objet et tu n'as pas envie qu'il soit modifié. Tu peux donc le savoir rien qu'à la signature de ta méthode.
Cela peut être nécessaire dans le cas où ces paramètres sont utilisés dans une classe anonyme.
En effet, des variables utilisées par une classe anonyme doivent obligatoirement être déclarées final (exception faite des attributs de la classe parente).Code:
1
2
3
4
5
6
7
8
9 public int methode(final String a, final String b){ new Thread() { public void run() { System.out.println("a = " + a); System.out.println("b = " + b); } }.start(); return 2; }
Ça ne change absolument rien qu'il soit final ou non dans ce cas. En effet, quand il n'est pas final, tu peux modifier la valeur de ta variable, ce que tu ne peux pas faire quand elle déclaré final:Citation:
Envoyé par fr1man
De toute façon, de l'extérieur, ça ne change rien, que tu modifies la variable qui de toute façon a été recopiée lors du passage de paramètre.Code:
1
2
3 public void method(Object o) { o = new Object(); }
Tu peux toujours faire, dans les 2 cas:
Donc ton objet peut être modifié.Code:
1
2
3 public void method(/* final ou pas */ MonObjet o) { o.setVariable(5); }
Donc ça n'a aucune incidence sur le monde "extérieur" à la méthode.
(faux d'après ce que j'ai dit juste au-dessus)Citation:
Envoyé par miloux32
Tu ne gagnes pas de place en mémoire, tu peux en gagner éventuellement à l'exécution (éventuellement hein).Citation:
Ca gagne en principe de la place en mémoire ( surtout pour les Strings puisque ton tableau de char ne changera pas de taille) ( Mais bon là ca reste à vérifier)
Les Strings sont immutables donc de toute façon leur taille ne change pas... Et de toute façon tu n'as qu'une référence sur ta String... Donc final ne change rien à ce niveau...
Quand on programme, on met rarement final sauf dans le cas présenté par le y@m's, par contre les générateurs de code (pour les interfaces graphiques) le mettent systématiquement, ça évite de faire des tests pour savoir si la variable doit être accédée dans une classe interne (je suppose).
Salut,
Pour faire simple : le mot-clef final permet de n'affecter une référence qu'une seule et unique fois (lors de l'appel de la méthode pour un paramètre). Par contre il n'apporte aucune restriction quand aux méthodes qui peuvent être appelée (contrairement au const du C++ dont il n'est pas du tout l'équivalent).
Perso je trouve que le mot-clef final n'est pas suffisamment utilisé. De plus je pense que c'est une bonne habitude de l'utiliser constamment pour les paramètres de méthode : après tout il est très rare d'avoir besoin de modifier la référence d'un paramètre reçu, et cela ne se révèle pas très "propre" à mes yeux...Citation:
Envoyé par ®om
a++
Ça devrait être implicitement final dans la jvm... Après si faut l'écrire à chaque fois c'est un peu lourd...Citation:
Envoyé par adiGuba
Sauf que lui il parle de la variable passée en paramètre et non pas de l'objet auquel elle fait référence. Donc la variable ne peut plus être réaffectée, mais l'objet en mémoire peut très bien être modifié ...Citation:
Envoyé par ®om
okCitation:
Envoyé par manblaizo