Je veux vérifier null ou vide spécifiquement dans mon code. Est-ce que empty et null sont identiques pour StringBuilder
en Java?
Par exemple:
StringBuilder state = new StringBuilder();
StringBuilder err= new StringBuilder();
success = executeCommand(cmd, state, err);
/* here executeCommand() returns empty or null in state, I cant make changes in <br/> executeCommand() so can I check it in my code somehow for state, if its null or empty? */<br/>
if (state == null) { //do blabla1 }
if (state.tostring().equals("")) { //do blabla2 }
Le code ci-dessus a-t-il un sens ou comment devrais-je le changer?
Non, null
et empty
sont différents pour StringBuilder
.
StringBuilder nullBuilder = null;
if(nullBuilder == null) {
System.out.println("Builder is null");
}
Et
StringBuilder emptyBuilder = new StringBuilder("");
if(emptyBuilder == null || emptyBuilder.toString().equals("")) {
System.out.println("Builder is empty");
}
En Java, null
est un littéral reference. Si une variable est null
, alors ne fait référence à rien.
Ainsi, si vous avez StringBuilder s = null
, cela signifie que s
est de type StringBuilder
mais ne fait pas référence à une instance StringBuilder
.
Si vous avez une référence non -null
, vous êtes libre d'appeler methods sur l'objet référé. Dans la classe StringBuilder
, une de ces méthodes est length()
. En fait, si vous appelez length()
en utilisant une référence null
, le moteur d'exécution Java lancera une NullPointerException
.
Par conséquent, ce code est assez courant:
If (s == null || s.length() == 0/*empty if the length is zero*/){
// do something
Il repose sur le fait que l'évaluation de ||
se fait de gauche à droite et s'arrête dès qu'elle atteint la première condition true
.
Moyenne nulle, il n'y a pas d'objet dans le tas pour cette variable de référence. Ceci est commun à tous les objets Java, non spécifique à StringBuilder
et aux moyens vides, ""
.
Dans votre code, vous avez créé un objet StringBuilder. La vérification de null est donc redondante. Et, vous pouvez cocher vide en utilisant la méthode isEmpty()
depuis Java String api
if(state.tostring().isEmpty()) {
//
}
Et vérifier que null est correct. Trouvez la version corrigée ici
if (state == null) {
// ...bla 1
} else if (state.tostring().isEmpty()) {
//... bla 2
}
Votre deuxième condition if
lancera NullPointerException
, si la state
est null. Donc if
devrait être imbriqué avec if else
Non. empty
signifie qu'il n'y a pas de caractères dans StringBuilder. null
signifie qu'il n'y a aucun objet StringBuilder.
Une variable est seulement null
si elle a un type de référence (par exemple String, StringBuilder, Set, sous la forme d'un thumbrule: tous les types en majuscules) et si elle n'a pas encore été initialisée ou a été définie explicitement sur null
.
Le code ci-dessous peut vous aider,
StringBuffer sb = new StringBuffer();
String str = sb.toString();
if(!"".equals(str)) {
System.out.println("String : " + str);
} else {
System.out.println("Empty Builder");
}
Tu peux essayer comme ça
StringBuilder state = new StringBuilder();
if(StringUtils.isNotBlank(state .toString())){
//this will check for null, " ", ""
}