【问题标题】:Difference between this.variable and variable in Java [duplicate]Java中this.variable和variable之间的区别[重复]
【发布时间】:2014-06-25 02:14:11
【问题描述】:

我不明白这两个代码之间的真正区别,尽管它们都可以工作。

如果我使用这个类:

public class City {
    private String name;

我不明白这个方法的区别:

public String getName(){
    return this.name;
}

还有这个:

public String getName(){
    return name;
}

这两种方法都有效,但哪一种最好用,为什么它们都有效?

感谢您的回答。

【问题讨论】:

  • 两者不同的唯一情况是存在名为name 的参数或局部变量,在这种情况下this 会覆盖引用绑定到其最接近定义的规则。跨度>
  • DupeChainOfDeath 在行动。这个问题首先出现在 SO 搜索中,但它被标记为 dupe of a dupe。答案分散在几个讨论中。

标签: java


【解决方案1】:

“this”表示类的实例。

在以下示例中,“this.a”是类中定义的 a (=10)。 而 "a" (=20) 是局部变量,在构造函数中定义。

更多详情:http://en.wikipedia.org/wiki/Variable_shadowing

例子:

public class Test
{
    int a = 10;
    public Test()
    {
        int a = 20;
        System.out.println(a); // prints 20
        System.out.println(this.a); // prints the "a" defined in the class. In this case, 10
    }

    public static void main(String[] args)
    {
        new Test();
    }
}

【讨论】:

    【解决方案2】:

    在您的示例中没有区别。您只是选择明确说明该变量是类变量。但是,如果您这样做:

    public String getName(){
        String name = "David";
        return this.name;
    }
    

    这意味着很多,因为您返回的不是名为 name 的局部变量,而是类变量。

    【讨论】:

      【解决方案3】:

      这两种方法在大多数中是相同的,但并非所有情况。采用以下构造函数:

      public City(String name){
          this.name = name;
      }
      

      在本地范围内有一个name 字段和一个name。如果没有this,则隐式使用本地范围内的那个(赋值右侧),但使用this,我们专门引用该字段(赋值左侧)。在我给出的示例中显示的赋值之前,this.name 将具有默认值 null(假设它被声明为 String name),而 name 将是构造函数参数的值。

      这称为 shadowing,并在 JLS 中正式讨论过。

      【讨论】:

        猜你喜欢
        • 2012-10-27
        • 1970-01-01
        • 2019-11-16
        • 2013-03-28
        • 2013-07-22
        • 1970-01-01
        • 2012-12-30
        • 1970-01-01
        • 2011-04-23
        相关资源
        最近更新 更多