2014-02-04 1 views
13

Я хочу проверить нуль или пустое место в моем коде. Пустоты и null одинаковы для StringBuilder в Java?Как проверить значение null на StringBuilder?

Например:

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 } 

ли выше кода имеют смысл или как я должен изменить его?

+0

Это не то же самое во всем мире, не только 'StringBuilder'. – Maroun

+0

Если вы запускаете статический анализ для своего кода, он будет жаловаться на то, что код в блоке if (state == null) никогда не будет выполнен, так как «состояние» никогда не может быть пустым в этой строке (поскольку оно было просто инициализировано не- -неверное значение). Это должно указывать указатель на null и "" быть совсем другими. – Torben

+0

thx..i пропустил еще одну строку в моем коде..и отредактирую ее и поместим еще несколько деталей. – user1145280

ответ

23

No, 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"); 
} 
+1

делает StringBuilder state = new StringBuilder() и StringBuilder state = new StringBuilder ("") одинаковы? – user1145280

+1

Да, оба они одинаковые. – Kick

+1

Этот ответ неправильный. Второй пример в нем не работает, потому что emptyBuilder i не null, что делает мертвым код оператора System.out.printLn. – Marquez

1

No. empty означает, что нет никаких символов в StringBuilder. null означает, что объекта StringBuilder вообще нет.

переменный только null, если он имеет ссылочный тип (например, String, StringBuilder, Set, как thumbrule: все капитализированные типы), и он еще не инициализирован или был явно null.

+0

plz предложите для кода – user1145280

3

Нуль означает, что в этой куче для этой ссылочной переменной нет объекта в куче. Это является общим для всех объектов java, не относящихся к StringBuilder и пустым средствам, "".

В вашем коде вы создали объект StringBuilder, поэтому проверка null является избыточной. И, Вы можете проверить пустой, используя isEmpty() метод в Java из струнного апи

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

и проверка нуль правильно. Найти исправленную версию здесь

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

Ваше второе if условие отбросит NullPointerException, если state равна нулю. Так if должен быть вложен if else

+0

комментарий plz на мой код – user1145280

+0

@ user1145280, проверьте ответ –

+0

ok я понял немного, но plz проверил отредактированный код один раз – user1145280

8

В 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 

Он опирается на тот факт, что оценка || находится слева направо и останавливается, когда он достигает первого true состояния.

0

Код ниже может помочь вам,

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

Вы можете попробовать, как этот

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