我是Java编程的初学者,在理解一些概念方面遇到了一些问题。我想知道两种实现是否相同:
代码1
public class MyThisTest {
private int a;
public MyThisTest(int a) {
this.a = a;
}
代码2
public class MyThisTest {
private int a;
public MyThisTest(int b) {
a = b;
}
是的,两者都一样,让我们看看为什么:
第一个
public class MyThisTest {
private int a;
public MyThisTest(int a) {
this.a = a;
}
您正在使用this
引用成员变量a
。使用this
是因为通过参数存在另一个a
变量。如果不使用this
,将为哪个变量分配值?与参数相同,因此它不会生效,因为它是"自动分配"值。
Wordthis
确保引用成员变量。这主要用于构造函数和getter/setter,因为参数名称应该与成员变量名称相同,所以为了处理歧义,使用了this
。
第二个代码
public class MyThisTest {
private int a;
public MyThisTest(int b) {
a = b;
}
在构造函数中,变量之间没有歧义,所以不需要this
,但您仍然可以使用this
,它可以完美地工作。
是的,这两个实现是相同的。但我强烈建议你详细阅读,这样你以后就不会犯任何错误。这个答案详细介绍了我们应该在什么时候使用this
。
这个关键字将由编译器添加。事实上,如果你写这样的
public class A {
private int a;
public A(int b) {
a = b;
}
}
编译然后反编译你可以看到编译器的工作
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
public class A {
private int a;
public A(int b) {
this.a = b;
}
}
所以,我想说,避免这只是使用了一些语法糖。