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搜索中,但它被标记为重复的重复。在几次讨论中,答案都很模糊。