Любая разница между String = null и String.пустой?
есть ли разница при использовании оператора if для проверки, пуста ли строка, используя String = null или String.isEmpty ()?
ie:
public String name;
if(name == null)
{
//do something
}
или
public String name;
if(name.isEmpty())
{
//do something
}
Если есть какие-либо другие (включая проблемы с производительностью), пожалуйста, дайте мне знать.
7 ответов
пустая строка-это строка с нулевой длиной. Значение null не имеет строки вообще.
- выражение
s == null
вернутсяfalse
Если s-пустая строка. - вторая версия бросит
NullPointerException
если строка имеет значение null.
Вот таблица, показывающая различия:
+-------+-----------+----------------------+
| s | s == null | s.isEmpty() |
+-------+-----------+----------------------+
| null | true | NullPointerException |
| "" | false | true |
| "foo" | false | false |
+-------+-----------+----------------------+
isEmpty()
проверяет наличие пустой строки ""
,
он будет бросать NullPointerException
Если вы вызываете isEmpty()
on null
экземпляр
переменная name
Не строку. Это ссылка в строку.
следовательно, проверка null определяет, если name
на самом деле ссылки a String
. Если это так, то (и только тогда) вы можете выполнить дополнительную проверку, чтобы увидеть, пуст ли он. т. е.
String name = null; // no string
String name = ""; // an 'empty' string
два разных случая. Обратите внимание, что если вы не проверяете nullness сначала, то вы попытаетесь вызвать метод по нулевой ссылке, и именно тогда вы получите страшный NullPointerException
строк, которые не содержат никакой ценности, но по-прежнему создается пустые строки, которые не созданы нуль
если вы применяете этот код:
if(name.isEmpty())
{
//do something
}
to null String
вы получили NullPointerException
.
null
проверка показывает, есть ли объект вообще.isEmpty
проверка показывает, является ли контент существующей String
объект пуст.
посмотрите исходный код вашей версии java.
например, в openjdk-7:http://www.docjar.com/html/api/java/lang/String.java.html
119 /** The count is the number of characters in the String. */
120 private final int count;
663 /**
664 * Returns <tt>true</tt> if, and only if, {@link #length()} is <tt>0</tt>.
665 *
666 * @return <tt>true</tt> if {@link #length()} is <tt>0</tt>, otherwise
667 * <tt>false</tt>
668 *
669 * @since 1.6
670 */
671 public boolean isEmpty() {
672 return count == 0;
673 }
isEmpty проверяет наличие строки"". Лучшая практика-проверить:
if (str != null && !str.isEmpty() {
// process string
}