如何在StringBuilder上检查null?

我想在我的代码中专门检查null或为空。 Java中的StringBuilder empty和null是否相同?

例如:

 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 
executeCommand() so can I check it in my code somehow for state, if its null or empty? */
if (state == null) { //do blabla1 } if (state.tostring().equals("")) { //do blabla2 }

以上代码是否有意义或我应该如何更改?

不, nullempty对于StringBuilder是不同的。

 StringBuilder nullBuilder = null; if(nullBuilder == null) { System.out.println("Builder is null"); } 

 StringBuilder emptyBuilder = new StringBuilder(""); if(emptyBuilder == null || emptyBuilder.toString().equals("")) { System.out.println("Builder is empty"); } 

在Java中, null引用文字 。 如果变量为null则不引用任何内容。

因此,如果你有StringBuilder s = null ,这意味着sStringBuilder类型,但它不是指StringBuilder实例。

如果您有非null引用,那么您可以自由地调用引用对象上的方法 。 在StringBuilder类中,一个这样的方法是length() 。 实际上,如果您使用null引用调用length()那么Java运行时将抛出NullPointerException

因此,这段代码很常见:

 If (s == null || s.length() == 0/*empty if the length is zero*/){ // do something 

它依赖于评估||的事实 从左到右,一旦达到第一个true状态就停止。

Null意味着,堆中没有该引用变量的对象。 这对所有java对象都是通用的,不是特定于StringBuilder和Empty意味着""

在您的代码中,您创建了一个StringBuilder对象,因此检查null是多余的。 并且,您可以使用java String api中的isEmpty()方法检查空

 if(state.tostring().isEmpty()) { // } 

并且检查null是正确的。 在这里找到更正的版本

 if (state == null) { // ...bla 1 } else if (state.tostring().isEmpty()) { //... bla 2 } 

如果state为null,则第二个if条件将抛出NullPointerException 。 所以if应该与if else嵌套

empty意思是,StringBuilder中没有字符。 null表示根本没有StringBuilder对象。

如果变量具有引用类型(例如String,StringBuilder,Set,作为thumbrule:所有大写类型)并且它尚未初始化或已显式设置为null则该变量仅为null

以下代码可以帮助您,

 StringBuffer sb = new StringBuffer(); String str = sb.toString(); if(!"".equals(str)) { System.out.println("String : " + str); } else { System.out.println("Empty Builder"); } 

你可以这样试试

 StringBuilder state = new StringBuilder(); if(StringUtils.isNotBlank(state .toString())){ //this will check for null, " ", "" }