String = null和String.isEmpty之间有什么区别?

时间:2012-12-03 18:00:39

标签: java string null

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

即:

public String name;

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

public String name;

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

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

8 个答案:

答案 0 :(得分:38)

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

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

这是一个显示差异的表格:

+-------+-----------+----------------------+
| s     | s == null | s.isEmpty()          |
+-------+-----------+----------------------+
| null  | true      | NullPointerException |
| ""    | false     | true                 |
| "foo" | false     | false                |
+-------+-----------+----------------------+

答案 1 :(得分:1)

isEmpty()检查空字符串""

如果您在NullPointerException实例

上调用isEmpty(),它会抛出null

答案 2 :(得分:1)

变量name不是String。它是String的引用

因此,空检查确定name实际引用 String。如果是,那么(并且只有那时)你可以进行进一步的检查以确定它是否为空。即。

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

是两种不同的情况。请注意,如果您不首先检查nullness,那么您将尝试在空引用上调用方法,那就是当您遇到可怕的NullPointerException

答案 3 :(得分:1)

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

答案 4 :(得分:0)

如果您应用此代码:

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

name为空时,您将获得NullPointerException

null检查一般会显示是否有物体 isEmpty检查会显示现有 String对象的内容是否为空。

答案 5 :(得分: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       }

答案 6 :(得分:0)

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

if (str != null && !str.isEmpty() {
   // process string
}

答案 7 :(得分:0)

这周我在修改一些旧的JaVa代码时遇到了这个问题,我在这里了解到我必须始终进行所有这些检查。答案的确是正确的,但是每次都很难记住,因此我决定通过一个简单的调用就为我做一个小功能。

这是什么,您总会得到想要的答案:

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

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

           return bTrueOrFalse;
        }