Подтвердить что ты не робот

Как проверить нулевое значение в java

В этом коде.

public class Test {
     public static void testFun(String str) {
         if (str == null | str.length() == 0) {
             System.out.println("String is empty");
         } else { 
             System.out.println("String is not empty");
         }
     }
     public static void main(String [] args) {
         testFun(null);
    }
}

Мы передаем нулевое значение функции testFun. Компилируется нормально, но дает nullPointerException во время выполнения.

Предположим, что значение фактического аргумента, передаваемого testFun, генерируется из какого-то процесса. Предположим, что по ошибке этот процесс возвращает нулевое значение и передается в testFun. Если это так, как можно проверить, что значение, переданное функции, равно нулю или нет?

Одним (странным) решением может быть присвоение формального параметра некоторой переменной внутри функции и последующее ее тестирование. Но если в функцию передано много переменных, это может стать утомительным и неосуществимым. Итак, как можно проверить нулевые значения в таком сценарии?

Редактировать: по ошибке я написал || вместо | в условии if. Теперь генерируется исключение во время выполнения

4b9b3361

Ответ 1

Редактирование показывает точно разницу между кодом, который работает, и кодом, который этого не делает.

Эта проверка всегда оценивает оба условия, бросая исключение, если str имеет значение null:

 if (str == null | str.length() == 0) {

В то время как это (используя || вместо |) является короткозамкнутым - если первое условие оценивается как true, второе не оценивается.

См. раздел 15.24 JLS для описания || и раздела 15.22.2 для двоичного |. Вступление к разделу 15.24 - важный бит, хотя:

Условный или оператор || оператор похож на | (§15.22.2), но оценивает его правый операнд, только если значение его левого операнда ложно.

Ответ 2

Проблема в том, что в вашем коде программа вызывает "null.length()", которая не определена, если аргумент, переданный функции, равен нулю. Вот почему выбрано исключение.

Ответ 4

Вы можете использовать StringUtils:

import org.apache.commons.lang3.StringUtils;

if (StringUtils.isBlank(str)) {

System.out.println("String is empty");

} else { 

System.out.println("String is not empty");

}

Посмотрите также: StringUtils.isBlank() vs String.isEmpty()

isBlank Примеры:

StringUtils.isBlank(null)      = true
StringUtils.isBlank("")        = true  
StringUtils.isBlank(" ")       = true  
StringUtils.isBlank("bob")     = false  
StringUtils.isBlank("  bob  ") = false

Ответ 5

Изменить ниже линии

if (str == null | str.length() == 0) {

в

if (str == null || str.isEmpty()) {

теперь ваш код будет работать corel. Убедитесь, что str.isEmpty() следует после str == null потому что вызов isEmpty() для null вызовет NullPointerException. Поскольку Java использует оценку короткого замыкания, когда str == null имеет значение true, она не будет оценивать str.isEmpty()