我不明白这两个代码之间的真正区别,尽管它们都可以工作。
如果我使用这个类:
public class City {
private String name;
我不明白这两种方法的区别:
public String getName(){
return this.name;
}
还有这个
public String getName(){
return name;
}
这两种方法都有效,但是哪一种是最好的,为什么它们都有效?
谢谢你的回答
这两个方法在大多数中是相同的,但不是所有情况。采用以下构造函数:
public City(String name){
this.name = name;
}
在局部作用域中存在一个name
域和一个name
域。如果没有this
,则隐式地使用局部作用域中的字段(赋值的右侧),但是对于this
,我们特别引用字段(赋值的左侧)。在我给出的示例中显示的赋值之前,this.name
将具有默认值null
(假设它被声明为String name
),而name
将是构造函数参数的值。
这被称为遮蔽,在JLS中进行了正式讨论。
"this"表示类的实例。
在下面的例子中,"this. "A"是类(=10)中定义的A。而"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();
}
}
在您的示例中没有区别。你只是选择明确变量是一个类变量。但是如果你这样做:
public String getName(){
String name = "David";
return this.name;
}
这意味着很多,因为您不是返回名为name
的局部变量,而是返回类变量。