2014-05-07 112 views
2

尽管它们都起作用,但我不明白这两个代码之间的真正区别。Java中this.variable和variable之间的区别

如果我使用这个类:

public class City { 
    private String name; 

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

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

这一个:

public String getName(){ 
    return name; 
} 

这两种方法的工作,但哪一个最好用,为什么他们都工作?

感谢您的答案。

+4

的唯一时间两者是不同的是,当有一个参数或命名'name'局部变量,在这种情况下,'this'会取代规定参考文献与其最接近的定义相结合。 –

+0

DupeChainOfDeath在行动。这个问题首先在SO搜索中显示,但它标有一个愚蠢的代价。答案分散在几个讨论。 – Stepan

回答

5

“this”表示类的实例。

在以下示例中,“this.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(); 
    } 
} 
9

这两种方法在大部分相同,但不是所有情况。看看下面的构造函数:

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

有一个name场,并在本地范围name。如果没有this,本地范围中的一个隐式使用(分配的右侧),但是我们特别指向该字段(赋值的左侧)this。在示例I给出的作业之前,this.name将具有默认值null(假定它被声明为String name),而name将是构造函数参数的值。

这叫做遮蔽并在JLS正式讨论。

1

在你的例子中没有区别。你只是选择了解变量是一个类变量。但是,如果你这样做:

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

这将意味着很多,因为你没有返回命名name局部变量,您传回类变量。

相关问题