15

使用 if 语句通过使用 String = null 或 String.isEmpty() 检查字符串是否为空时有什么区别吗?

IE:

public String name;

if(name == null)
{
    //do something
}

或者

public String name;

if(name.isEmpty())
{
    //do something
}

如果有任何不同(包括性能问题),请告诉我。

4

8 回答 8

47

空字符串是长度为零的字符串。null 值根本没有字符串。

  • 如果 s 是空字符串,则表达式s == null将返回。false
  • NullPointerException如果字符串为空,第二个版本将抛出 a 。

下表显示了差异:

+-------+-----------+----------------------+
| s     | s == null | s.isEmpty()          |
+-------+-----------+----------------------+
| null  | true      | NullPointerException |
| ""    | false     | true                 |
| "foo" | false     | false                |
+-------+-----------+----------------------+
于 2012-12-03T18:02:36.887 回答
2

该变量name不是字符串。它是对字符串的引用。

因此,空检查确定是否name实际引用a String。如果是这样,那么(并且只有这样)您可以执行进一步检查以查看它是否为空。IE

String name = null;  // no string
String name = "";    // an 'empty' string

是两种不同的情况。请注意,如果您不首先检查空值,那么您将尝试在空引用上调用一个方法,这就是您感到恐惧的时候NullPointerException

于 2012-12-03T18:02:22.583 回答
2

用“”赋值的字符串不包含任何值但为空(长度=0),未实例化的字符串为空。

于 2012-12-03T18:02:51.493 回答
1

isEmpty()检查空字符串""

NullPointerException如果你isEmpty()null实例上调用它会抛出

于 2012-12-03T18:02:14.127 回答
0

如果您应用此代码:

if(name.isEmpty())
{
    //do something
}

name为空时,你会得到NullPointerException.

null检查通常会显示您是否有对象。检查显示现有对象
isEmpty的内容是否为空。 String

于 2012-12-03T18:03:28.533 回答
0

查看您的 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       }
于 2012-12-03T18:06:48.580 回答
0

isEmpty 检查字符串“”。最佳做法是检查:

if (str != null && !str.isEmpty() {
   // process string
}
于 2012-12-03T18:07:17.173 回答
0

本周我在修改一些旧的 Java 代码时遇到了这个问题,我在这里了解到我必须始终进行所有这些检查。答案确实是正确的,但我发现每次都很难记住,所以我决定做一个小函数,在 1 个简单的调用中为我完成。

有了这个,你总能得到你想要的答案:

      public boolean StringIsNull(String pi_sChaine)
        {  boolean bTrueOrFalse = true;

           if (pi_sChaine == null || pi_sChaine.isEmpty())
             { bTrueOrFalse = true; }
           else
             { bTrueOrFalse = false; }

           return bTrueOrFalse;
        }
于 2019-10-31T14:45:22.737 回答