如何在StringBuilder上检查null?

use*_*280 17 java stringbuilder

我想在我的代码中专门检查null或empty.StringBuilder在Java中,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  <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 }
Run Code Online (Sandbox Code Playgroud)

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

Kic*_*ick 31

不,null并且empty不同StringBuilder.

StringBuilder nullBuilder = null;
if(nullBuilder == null) {
    System.out.println("Builder is null");
}
Run Code Online (Sandbox Code Playgroud)

&

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

  • StringBuilder state = new StringBuilder()和StringBuilder state = new StringBuilder("")是一样的?? (2认同)

Bat*_*eba 9

在Java中,null是一个引用文字.如果变量null不是指任何东西.

所以,如果你有StringBuilder s = null,那意味着它s是类型的,StringBuilder但它不是指一个StringBuilder实例.

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

因此,这段代码很常见:

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

它依赖于以下事实:评估||是从左到右,一旦达到第一个true条件就停止.


Abi*_*san 5

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

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

if(state.tostring().isEmpty()) {
//
}
Run Code Online (Sandbox Code Playgroud)

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

if (state == null) {
// ...bla 1
} else if (state.tostring().isEmpty()) {
//... bla 2
}
Run Code Online (Sandbox Code Playgroud)

如果为空,您的第二个if条件将抛出。所以应该嵌套NullPointerExceptionstateifif else