Любая разница между 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
}