特にコード内でnullまたは空を確認したい。 JavaのStringBuilder
の空と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 }
上記のコードは意味がありますか、それをどのように変更する必要がありますか?
いいえ、null
ではempty
と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
_がある場合、s
はStringBuilder
型ですが、StringBuilder
インスタンスを参照していません。
null
以外の参照がある場合は、参照オブジェクトでmethodsを自由に呼び出すことができます。 StringBuilder
クラスでは、そのようなメソッドの1つがlength()
です。実際、null
参照を使用してlength()
を呼び出す場合、JavaランタイムはNullPointerException
をスローします。
したがって、このコードは非常に一般的です。
_If (s == null || s.length() == 0/*empty if the length is zero*/){
// do something
_
_||
_の評価は左から右に行われ、最初のtrue
条件に達すると停止するという事実に依存しています。
ヌルという意味は、その参照変数のヒープにオブジェクトがありません。これは、すべてのJavaオブジェクト、StringBuilder
に固有ではなく、空の手段、_""
_に共通です。
コードでは、StringBuilderオブジェクトを作成しているため、nullのチェックは冗長です。また、Java String apiでisEmpty()
メソッドを使用して空をチェックできます。
_if(state.tostring().isEmpty()) {
//
}
_
そして、nullのチェックは正しいです。修正版はこちらでご覧ください
_if (state == null) {
// ...bla 1
} else if (state.tostring().isEmpty()) {
//... bla 2
}
_
if
がnullの場合、2番目のNullPointerException
条件はstate
をスローします。したがって、if
は_if else
_でネストする必要があります
以下のコードが役立ちます。
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, " ", ""
}