En PHP, il existe une fonction isset
. Et Java? Je pense que je peux utiliser == null
avec des objets, mais qu'en est-il des types de valeur comme int
Le compilateur de Java ne vous permettra pas de définir des variables et de les utiliser avant de leur affecter une valeur, donc le problème n'existe pas sous la même forme qu'il existe en php.
Si dans votre cas, le compilateur ne vous a pas déjà arrêté (car il s'agit par exemple d'une variable d'instance), la meilleure solution est probablement d'initialiser la variable à une valeur "spéciale" comme suggéré par Guest11239193. Comme ça:
int x = 0; // because by convention 0 is a reasonable default here
Bien sûr, ce qu'est une valeur d'initialisation "sûre et raisonnable" dépend de l'application.
Ensuite, vous pourriez
if (x == 0) { // only allow setting if x has its initial value
x = somenewvalue;
}
Ou vous pouvez accéder à x via un setter qui empêche de changer plus d'une fois (probablement exagéré dans la plupart des cas):
private int x;
private boolean x_was_touched = false;
public void setX (int newXvalue) {
if (!x_was_touched) {
x = newXvalue;
x_was_touched = true;
}
}
public int getX() {
return x;
}
Vous pouvez également utiliser un Integer
, frère de l'objet int, qui peut être initialisé à null
Integer x = null;
Cependant, le fait que vous pensiez avoir besoin de ces connaissances peut masquer une faille logique plus profonde dans votre programme, donc je vous suggère d'explorer la raison pour laquelle vous voulez savoir si une valeur primitive (primitive par opposition aux objets, int
vs Integer
) n'a pas été touché.
Une variable non existante n'existe pas en Java.
Dans Java c'est une erreur du compilateur d'utiliser une variable sans être définie.
Les variables de classe et d'instance sont initialisées avec ce qui est considéré comme une valeur "nulle" par défaut, selon le type de données.
Donc une fonction semblable à isset
n'a pas de sens.
Vous ne pouvez pas vérifier si la variable est définie. Vous pouvez:
0
pour un compteur, la valeur entière maximale si vous calculez un minimum, etc.-1
si vous allez utiliser des valeurs entières non signées et une chaîne vide pour une chaîne.La valeur par défaut pour int
sera 0
et pour string
sera ""
.
Vous pouvez essayer d'utiliser un objet au lieu d'une valeur primitive, c'est-à-dire.
Integer x = null;
...
public Integer getX(){
if(x == null) {
x = new Integer(10);
}
return x;
}
Le cas d'utilisation le plus courant de vouloir avoir une valeur non définie est lors de la récupération d'informations à partir d'une source de données. Dans toute requête SQL donnée, vous avez probablement des enregistrements qui ont des entiers dont les valeurs sont 0, mais qui peuvent également être des champs vides/nuls. Il en va de même pour les chaînes, où une chaîne vide '' n'est pas la même chose qu'une chaîne non définie ou nulle.
Il semble que l'utilisation des versions de référence d'objet des types natifs soit la seule solution ici, ce qui est regrettable car c'est désordonné. L'alternative serait de stocker un booléen pour chaque champ de données unique qui doit être vérifié et maintenu à la main, ce qui est encore pire.
Créez vos fonctions pour ce contrôle car chaque objet a ses propres règles concernant le "résultat isset ()";
Exemples :
public static final boolean isEmpty(String x) {
return (x == null || x.trim().equals(""));
}
public static final boolean isEmpty(Integer x) {
return (x == null || x == 0);
}
public static final boolean isEmpty(Long x) {
return (x == null || x == 0);
}
public static final boolean isEmpty(Collection<?> x) {
return (x == null || x.size() == 0);
}
public static final boolean isEmpty(Map<?,?> x) {
return (x == null || x.size() == 0);
}
public static final boolean isEmpty(Object[] x) {
return (x == null || x.length == 0);
}
La variable entière déclarée dans Java, ne peut pas subir la condition pour "undefined"
ou "null"
. Mais en utilisant le wrapper class
nous pouvons l'utiliser, c'est-à-dire: Integer a = null;
public class Solution {
public static void main(String[] args) {
Integer max = null; //works perfectly
int max1 == null; //throws and incompatible error
if (max == null)
System.out.println("null");
}
}