使用'这个'关键字影响Java性能?

时间:2014-02-06 22:48:37

标签: java performance java-7 openjdk

使用this关键字是否会影响Java性能?

在这个例子中:

class Prog {
  private int foo;

  Prog(int foo) {
    this.foo = foo;
  }
}

在以下情况下是否存在性能开销?:

class Prog {
  private int foo;

  Prog(int bar) {
    foo = bar;
  }
}

今天早些时候我和几位同事正在讨论这个问题,没有人能够得出我们都同意的答案。任何明确的答案?

2 个答案:

答案 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关键字的代码完全相同。