web-dev-qa-db-fra.com

Java vérifier pour voir si une variable a été initialisée

J'ai besoin d'utiliser quelque chose de similaire à la fonction isset de php. Je sais que php et Java sont EXTRÊMEMENT différents, mais php est ma seule base de connaissances antérieures sur quelque chose de similaire à la programmation. Existe-t-il une sorte de méthode qui retournerait une valeur booléenne pour une instance ou non? variable a été initialisée ou non. Par exemple ...

if(box.isset()) {
  box.removeFromCanvas();
}

Jusqu'à présent, j'ai eu ce problème où j'obtiens une erreur d'exécution lorsque mon programme essaie de masquer ou de supprimer un objet qui n'a pas encore été construit.

37
CaldwellYSR

En supposant que vous souhaitez savoir si la variable a été affectée explicitement à une valeur ou non, la réponse est "pas vraiment". Il n'y a absolument aucune différence entre un champ (variable d'instance ou variable de classe) qui n'a pas encore été explicitement attribué pas du tout, et celui auquel a été affectée sa valeur par défaut - 0, faux, nul, etc.

Maintenant si vous savez qu'une fois attribuée, la valeur ne sera jamais réaffectée à une valeur nulle, vous pouvez utiliser:

if (box != null) {
    box.removeFromCanvas();
}

(et cela évite également un éventuel NullPointerException) mais vous devez savoir qu'un "champ avec une valeur nulle" n'est pas identique à "un champ auquel aucune valeur n'a été explicitement affectée". Null est une valeur de variable parfaitement valide (pour les variables non primitives, bien sûr). En effet, vous pouvez même vouloir changer le code ci-dessus pour:

if (box != null) {
    box.removeFromCanvas();
    // Forget about the box - we don't want to try to remove it again
    box = null;
}

La différence est également visible pour les variables locales, qui ne peuvent pas être lues avant d'avoir été "définitivement attribuées" - mais l'une des valeurs qui peuvent être définitivement attribuées est null (pour les variables de type référence):

// Won't compile
String x;
System.out.println(x);

// Will compile, prints null
String y = null;
System.out.println(y);
66
Jon Skeet

Les variables ou champs d'instance, ainsi que les variables statiques, reçoivent des valeurs par défaut en fonction du type de variable:

int: 0
char: '\ u0000' ou 0
double: 0,0
booléen: faux
référence: null

Je veux juste préciser que les variables locales (c'est-à-dire déclarées dans un bloc, par exemple la méthode, pour la boucle, tandis que la boucle, try-catch, etc.) ne sont pas initialisées aux valeurs par défaut et doivent être explicitement initialisées.

6
Protongun