Java中this.variable和variable的区别
我不理解这两种代码之间的真正区别,尽管它们都能工作 如果我使用这个类:Java中this.variable和variable的区别,java,Java,我不理解这两种代码之间的真正区别,尽管它们都能工作 如果我使用这个类: public class City { private String name; 我不明白这种方法的区别: public String getName(){ return this.name; } 还有这个: public String getName(){ return name; } 这两种方法都有效,但哪一种是最好的,为什么它们都有效 谢谢你的回答。这两种方法在大多数情况下是相同的,但并非
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.name
将具有默认值null
(假设它被声明为String name
),而name
将是构造函数参数的值
这被称为阴影,并在中正式讨论 在您的示例中没有区别。您只是选择解释变量是类变量。但是,如果您这样做:
public String getName(){
String name = "David";
return this.name;
}
这意味着很多,因为您没有返回名为name
的局部变量,而是返回类变量。“this”表示类的实例
在下面的示例中,“this.a”是类(=10)中定义的a。
而“a”(=20)是局部变量,在构造函数中定义
更多详情:
例如:
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();
}
}
这两个变量唯一不同的时候是当有一个名为
name
的参数或局部变量时,在这种情况下this
超越了引用与其最接近的定义绑定的规则。DupeChainOfDeath in action。这个问题首先出现在SO搜索中,但它被标记为重复的重复。在几次讨论中,答案都很模糊。