Совмещение проверок на null
и пустоту
На предыдущем этапе мы узнали, как проверить, является ли переменная null
с использованием оператора ==
. Однако в Java, особенно при работе с объектами String
, часто необходимо проверить не только, является ли переменная null
, но и, является ли она "пустой". Пустая строка - это объект String
, который существует, но не содержит символов (например, ""
). С другой стороны, строка, равная null
, означает, что переменная вообще не ссылается на какой-либо объект String
.
Попытка вызвать методы, такие как isEmpty()
или length()
, для строки, равной null
, приведет к ошибке NullPointerException
. Поэтому, когда вы хотите обрабатывать как null
, так и пустые строки одинаково (например, считать их "пустыми" или "отсутствующими"), вам нужно проверить оба условия.
Самый распространенный способ сделать это - сначала проверить, является ли строка null
, а затем, если она не null
, проверить, является ли она пустой с использованием метода isEmpty()
.
Давайте модифицируем нашу программу HelloJava.java
, чтобы продемонстрировать совмещение этих проверок.
-
Откройте файл HelloJava.java
в редакторе WebIDE.
-
Замените текущий код следующим:
public class HelloJava {
public static void main(String[] args) {
String text1 = null;
String text2 = ""; // An empty string
String text3 = "Hello"; // A non-empty string
System.out.println("Checking text1 (null):");
if (text1 == null || text1.isEmpty()) {
System.out.println("text1 is null or empty.");
} else {
System.out.println("text1 is not null and not empty: " + text1);
}
System.out.println("\nChecking text2 (empty):");
// It's crucial to check for null first!
if (text2 == null || text2.isEmpty()) {
System.out.println("text2 is null or empty.");
} else {
System.out.println("text2 is not null and not empty: " + text2);
}
System.out.println("\nChecking text3 (not empty):");
if (text3 == null || text3.isEmpty()) {
System.out.println("text3 is null or empty.");
} else {
System.out.println("text3 is not null and not empty: " + text3);
}
}
}
В этом обновленном коде:
- Мы вводим три переменные типа
String
: text1
(равна null
), text2
(пустая) и text3
(не пустая).
- Мы используем логический оператор ИЛИ (
||
) для объединения проверки на null
(text == null
) и проверки на пустоту (text.isEmpty()
).
- Условие
text == null || text.isEmpty()
будет истинным, если text
равно null
или если text
не равно null
и text.isEmpty()
возвращает true
.
- Важно: Проверка на
null
(text == null
) должна идти первой в условии ||
. Если text
равно null
, первая часть условия ||
(text == null
) будет истинной, и Java использует "короткую цепочку вычислений" для пропуска второй части (text.isEmpty()
), тем самым предотвращая ошибку NullPointerException
. Если бы проверка isEmpty()
шла первой и text
было равно null
, это привело бы к ошибке.
-
Сохраните файл (Ctrl+S или Cmd+S).
-
Скомпилируйте программу в терминале:
javac HelloJava.java
-
Запустите программу:
java HelloJava
Вы должны увидеть следующий вывод:
Checking text1 (null):
text1 is null or empty.
Checking text2 (empty):
text2 is null or empty.
Checking text3 (not empty):
text3 is not null and not empty: Hello
Этот вывод показывает, что наша совмещенная проверка правильно определила как строку, равную null
(text1
), так и пустую строку (text2
) как "равную null
или пустую", при этом правильно определила непустую строку (text3
).
Эта совмещенная проверка (string == null || string.isEmpty()
) является очень распространенным шаблоном в Java, когда вам нужно обрабатывать как null
, так и пустые строки. Многие библиотеки также предоставляют вспомогательные методы для этого, например, StringUtils.isEmpty()
или StringUtils.isBlank()
(который также проверяет на наличие пробелов) в Apache Commons Lang, но понимание базовой совмещенной проверки является фундаментальным.