-1

这两种类型有什么不同吗?

public class MyClass{
String name;

public MyClass(String nn){
this.name = nn;
name = nn;
}
}
4

5 回答 5

5

不,它们是完全等价的。有时通过使用this关键字来显式是很有用的,因为可能有两个同名但范围不同的变量,如下所示:

public class MyClass {
    String name;

    public MyClass(String name) {
        name = name; // Obviously doesn't work
        this.name = name;  // Now it works.
    }
}

但是,由于您不在这种情况下,因此没有什么不同。

于 2013-08-16T11:26:38.180 回答
5

不,您的情况没有区别。

但在以下情况下会有所帮助:

public MyClass(String name){
this.name = name; //works
name = name;  // doesn't
}
于 2013-08-16T11:27:24.473 回答
2

在您的特定情况下,非限定名称解析为this.name,但在其他情况下可能并非如此。明显的情况是构造函数参数具有相同的名称,但还有其他更复杂的情况涉及内部类,其中实际放入会this 破坏名称解析。

因此,如果您只对狭隘和具体的情况感兴趣,答案是明确的,但总的来说,您必须警惕 Java 变量名称解析的微妙之处。

于 2013-08-16T11:29:27.820 回答
1

没有区别。this如果参数的名称等于字段名称,您可能需要使用。

public MyClass(String name){
    this.name = name;
}
于 2013-08-16T11:27:39.800 回答
0

没有这样的区别,但必须使用“this”

public MyClass(String name){
       this.name = name; // it works
       name = name;  // it doesn't
}

您需要知道我们为什么使用“this”关键字。所以这是你的答案

于 2013-08-16T12:03:39.347 回答