使用this
关键字是否会影响Java性能?
在这个例子中:
class Prog {
private int foo;
Prog(int foo) {
this.foo = foo;
}
}
在以下情况下是否存在性能开销?:
class Prog {
private int foo;
Prog(int bar) {
foo = bar;
}
}
今天早些时候我和几位同事正在讨论这个问题,没有人能够得出我们都同意的答案。任何明确的答案?
答案 0 :(得分:18)
不,一点也不。对于同一件事,它只是一种不同的语法。它被编译成完全相同的字节码。所以说它就像一个人:你用两种不同的方式告诉编译器两次做同样的事情。
javap
证明了这一点。这是this.
:
{
Prog(int);
flags:
Code:
stack=2, locals=2, args_size=2
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: aload_0
5: iload_1
6: putfield #2 // Field foo:I
9: return
LineNumberTable:
line 4: 0
line 5: 4
line 6: 9
}
这里没有this.
:
{
Prog2(int);
flags:
Code:
stack=2, locals=2, args_size=2
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: aload_0
5: iload_1
6: putfield #2 // Field foo:I
9: return
LineNumberTable:
line 4: 0
line 5: 4
line 6: 9
}
唯一不同的是2
,但我必须为两个测试用例选择不同的名称。
答案 1 :(得分:0)
不,不。
编译后带或不带this
关键字的代码完全相同。