java—有“this”和没有“this”的代码之间的区别

64jmpszr  于 2021-07-06  发布在  Java
关注(0)|答案(3)|浏览(753)

我是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;
  }
6jjcrrmo

6jjcrrmo1#

是的,两种实现都是相同的。但我强烈建议你仔细阅读,这样你以后就不会犯任何错误。这个答案详细说明了我们什么时候应该使用 this .

6ovsh4lw

6ovsh4lw2#

是的,两者都一样,让我们看看原因:
第一

public class MyThisTest {
  private int a;

  public MyThisTest(int a) {
    this.a = a;
  }

您正在使用 this 引用成员变量 a . 使用 this 是因为根据参数 a 变量。如果你不使用 this 哪个变量将被赋值?与参数相同,因此它不会生效,因为它是“自动分配”值。
文字 this 确保引用成员变量。这主要用于构造函数和getter/setter,因为参数名应该与成员变量名相同,以便处理歧义 this 已使用。
第二个代码

public class MyThisTest {
  private int a;

  public MyThisTest(int b) {
    a = b;
  }

在构造函数中,变量之间没有歧义,所以 this 不需要,但您仍然可以使用 this 而且效果很好。

yqyhoc1h

yqyhoc1h3#

此关键字将由编译器添加。实际上,如果你写这样的东西

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;
    }
}

所以,我想说,避免这只是一些语法糖的用法。

相关问题