Y a-t-il une différence entre appeler this.method()
et method()
(y compris la différence de performance) ?
Réponses
Trop de publicités?Il n'y a absolument aucune différence entre ces constructions et le bytecode généré sera exactement le même, d'où un impact nul sur les performances. this
est résolu pendant la compilation s'il n'est pas explicitement défini.
La seule raison d'utiliser des this
est la lisibilité - certaines personnes trouvent qu'il est plus facile à lire parce que this
suggère qu'il s'agit d'une méthode d'instance de l'objet courant.
Veuillez également noter que si method()
est statique, en utilisant this
est découragée et trompeuse.
private static void method() {
}
private void foo() {
this.method(); //generates warning in my IDE for a reason
}
Et dans ce cas, cela n'aura également aucun effet sur les performances.
On peut constater qu'il n'y a pas de différence en appelant javap -c ClassName
sur la ligne de commande. Par exemple :
public class This {
private void method() {
}
public void noThis() {
method();
}
public void useThis() {
this.method();
}
}
Produit la sortie désassemblée suivante :
Compiled from "This.java"
public class This extends java.lang.Object{
public This();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public void noThis();
Code:
0: aload_0
1: invokespecial #2; //Method method:()V
4: return
public void useThis();
Code:
0: aload_0
1: invokespecial #2; //Method method:()V
4: return
}
Il n'y a pas de réelle différence - Du moins, il n'y a pas d'impact sur les performances. Je préfère ne pas écrire "this" - L'IDE peut généralement mettre en évidence les appels à this de toute façon, et je pense que c'est moins lisible lorsque chaque accès aux méthodes/champs/... commence par "this.". Mais c'est vraiment une question de préférence personnelle.