“这个”vs正常初始化java

时间:2012-09-25 02:35:37

标签: java

我是java的初学者,并且慢慢开始了解这种语言。

我很难理解“这个”变量。

例如,哪个更好......为什么?

  public class Foo{
   int a;
   public Foo(int _a){
   a = _a;
     }
 }

VS

public class Foo{
   int a;
   public Foo(int _a){
   this.a = _a;
     }
 }

由于

5 个答案:

答案 0 :(得分:8)

就个人而言,我讨厌那些使用下划线或“m_”区分变量的约定。这就是IDE要明确的内容。

使用this清楚地描述属于当前实例的变量。

您的示例都没有任何优势。您可以通过查看生成的字节代码向自己证明。如果你使用javap,你会看到两个编译成相同的代码。

在我看来,这与你自己和其他程序员的可读性有关。良好的IDE,如IntelliJ,使用突出显示和颜色编码,使其更加清晰。

绝对需要的一种情况是方法参数和私有成员之间存在名称冲突。然后你必须使用this来消除哪个编译器的歧义:

public class Foo {
    private int x;
    public void setX(int x) {
        this.x = x;  // this is required here.
    }
}

答案 1 :(得分:4)

就语言而言,两者都“更好”,它们完全相同。

然而,有一个很好的理由更喜欢第二个选项,即代码更清楚你正在做什么。

答案 2 :(得分:3)

哪个更好是一个主观的事情。我更喜欢显式命名this.a(虽然我的变量会比那更具描述性),因为它清楚地表明你所指的是属于当前对象的。

否则,你必须去别处寻找确认。例如,它可以是在此点和函数开始之间的任何位置创建的局部变量。

答案 3 :(得分:2)

根据您在上面发布的代码,没有区别。然而,有时Java的范围和阴影机制使这成为必要。例如,

public class Foo{
   int a;
   public Foo(int _a){
       this.a = _a;
   }
 }

是不必要的,这是

public class Foo{
   int a;
   public Foo(int a){
       this.a = a;
   }
 }

这有时候很有用,而不是像a这样的简单变量名,你会有更复杂的名称。

这可能是一种奇怪的现象,因为某些C ++类型调用了这个 - >实际上确实做了一些与查找变量有关的东西。然而,Java回避了所有这些细节。

答案 4 :(得分:2)

在这种情况下,它们会生成相同的字节码,所以它实际上只是一种风格问题。通常,this(严格来说不是变量)指的是当前正在指定的类,或者更常见的是它的一个实例(在其上调用当前正在指定的方法的实例)。