0
votes

Différence entre le code avec "this" et sans lui

Je suis un débutant en programmation Java et j'ai quelques problèmes pour comprendre certains concepts. Je voudrais savoir si les deux implémentations sont les mêmes:

Code 1

public class MyThisTest {
  private int a;

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

Code 2

public class MyThisTest {
  private int a;

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


4 commentaires

Oui, les deux sont identiques.


L'utilisation principale de this est de lever l'ambiguïté des références de variables. Voyez quand l'utiliser .


@jarmod C'est exactement ce que je voulais savoir. Merci!


@jarmod une utilisation secondaire de this est lorsque vous êtes un débutant et que vous voulez que l'EDI vous aide avec Ctrl + Space (ou suis-je le seul à avoir fait cela ...)


3 Réponses :


1
votes

Oui, les deux implémentations sont identiques. Mais je vous recommande vivement de lire en détail à ce sujet afin que vous ne fassiez aucune erreur future. Cette réponse va en détail quand nous devrions utiliser this .


0 commentaires

2
votes

Oui, les deux sont identiques, voyons pourquoi:

Première

public class MyThisTest {
  private int a;

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

Vous utilisez this pour désigner la variable membre a . L'utilisation de this est parce que par paramètre il y a a autre variable. Si vous ne l' utilisez pas this que variable sera attribuée la valeur? Identique au paramètre, donc il ne prend pas effet car il "attribue automatiquement" la valeur.

Word, this garantit que la variable membre est référencée. Ceci est principalement utilisé dans les constructeurs et les getter / setters car le nom du paramètre doit être le même que le nom de la variable membre, donc pour gérer l'ambiguïté, this est utilisé.

Le deuxième code

public class MyThisTest {
  private int a;

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

Dans le constructeur il n'y a pas d' ambiguïté entre les variables, donc this n'est pas nécessaire, mais vous pouvez toujours utiliser this et il fonctionne parfaitement.


0 commentaires

1
votes

ce mot-clé serait ajouté par le compilateur. En fait, si vous écrivez quelque chose comme ça

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

Compilez puis décompilez-le, vous pouvez voir le travail du compilateur

public class A {

    private int a;

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

Donc, je dirais qu'éviter cela n'est qu'une utilisation de certains sucres de syntaxe.


0 commentaires