This seems like it could be a common question but I searched SO and Google and couldn't find quite what I'm looking for:
What is the overhead of calls to the this
keyword in Java? I know in C++ there is some minimal overhead due to dereferencing the current object pointer. Does Java incur the same kind of overhead? Is it less optimal to make multiple calls to this
. It's mostly a question of readability vs. optimization.
None whatsoever. They both produce exactly the same bytecode. For example, this:
package test;
public class T {
int a=0;
public T() {
System.out.println(a); //this line
}
public static void main(String[] args) {
new T();
}
}
...produces:
public class test.T {
int a;
public test.T();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: aload_0
5: iconst_0
6: putfield #2 // Field a:I
9: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream;
12: aload_0
13: getfield #2 // Field a:I
16: invokevirtual #4 // Method java/io/PrintStream.println:(I)V
19: return
public static void main(java.lang.String[]);
Code:
0: new #5 // class test/T
3: dup
4: invokespecial #6 // Method "<init>":()V
7: pop
8: return
}
...regardless of whether the line marked this line uses a
or this.a
. (Try it if you like - compile the above code both ways and compare both class files with javap -c
.) Considering they produce exactly the same bytecode, there's no way there can be differences in performance.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With