En Java, quelle est la différence entre ce.méthode() et la méthode()?
Quelle est la différence entre un appel this.method()
et method()
(y compris différence de performances)?
Vous devez vous connecter pour publier un commentaire.
Quelle est la différence entre un appel this.method()
et method()
(y compris différence de performances)?
Vous devez vous connecter pour publier un commentaire.
Moment crucial, c'est que si vous utilisez
OuterClass.this.method()
par exempleIl n'y a absolument aucune différence entre ces constructions et le bytecode généré sera exactement le même, par conséquent, aucun impact sur les performances.
this
est résolu lors de la compilation si pas explicitement défini.La seule raison de l'utilisation explicite
this
est la lisibilité - certaines personnes trouvent plus facile à lire parce quethis
suggère que c'est une méthode d'instance de l'objet courant.Veuillez également noter que si
method()
est statique, à l'aide dethis
est découragé et trompeuse.Et dans ce cas, il sera également sans effet sur les performances.
static
méthodes.Qu'il n'y a pas de différence, peut être vu en appelant
javap -c ClassName
sur la ligne de commande.Par exemple:
Produit est le suivant démonté de sortie:
this
.Pour les méthodes il n'y a pas de différence, mais il peut faire une différence avec les champs. Considérer ce code:
Il n'y a pas de différence réelle - Au moins il n'y a pas d'impact sur les performances. Je préfère ne pas écrire "ce" - L'IDE peut généralement de mettre en évidence les appels à cela de toute façon, et je pense que c'est moins lisible lors de chaque accès à des méthodes/champs/... commencer par "ce.". Mais c'est vraiment une question de préférence personnelle.
Il n'y a pas de différence à tous les autres de la lisibilité. Il le rend plus claire pour le lecteur.
this
est redondant, car il est implicite. Il pourrait aider les débutants, c'est ennuyeux pour la plupart) plus de codeurs expérimentés.Utilisation
this.method()
et/outhis.myVar
ou de ne pas les méthodes il n'y a pas de différence, sur vars il y a peut-être - mais être conformes à ce sujet. Je le vois disséminés un peu partout dans le code, il m'arrive de voirthis.m_myClassVar
.Personnellement, je préfère le préfixe ma classe à vars avec un simple trait de soulignement et de mettre une fin trait de soulignement sur ma méthode args:
Bien que la plupart des IDEs permettra de savoir qui est qui, je trouve, ce qui tend à empêcher misassignment et rend les intentions du code plus clair et de l'OMI, plus facile à lire.
Je ne l'utilisation de
_thisInstance.myMethod()
(où_thisInstance
est une référence à l'extérieur de la classe) ou_thisInstance._myVar
, dans les classes internes/auditeurs/threads/etc. où j'ai besoin d'être clair sur ce que la méthode de la classe je suis d'appel et/ou lorsque j'ai besoin d'avoir une référence à une instance de classe.L'utilisation de ce.méthode() indique clairement qu'une fonction associée à l'instance de la classe est appelée, par opposition à une fonction statique ou de l'un appartenant à un autre objet.
C'est dans l'esprit de ces développeurs en C++ qui aiment faire précéder de "m_" sur toutes les variables de membre dans une classe. Il rend la propriété sans ambiguïté. J'ai tendance à l'aimer, mais ce n'est pas aussi important lorsque vous utilisez un IDE qui clarifie les choses telles utilisant des couleurs et des polices.
Avez-vous essayé de le faire.variable dans le constructeur?
En théorie, en C++, car l'objet n'a pas encore été créé il n'est pas de cela. Je ne suis pas sûr de le cas en Java.
this.foo = foo;
est un schéma très commun à l'initialisation des champs (variables membres) à partir de paramètres de même nom.