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

Java String=null和String.isEmpty之间有什么区别吗?,java,string,null,Java,String,Null,使用if语句检查字符串是否为空时,使用string=null或string.isEmpty()是否有任何区别 即: 或 如果有任何不同(包括性能问题),请告诉我。isEmpty()检查是否有空字符串“” 如果在null实例上调用isEmpty(),它将抛出NullPointerException,变量name不是字符串。它是对字符串的引用 因此,空检查确定名称是否实际引用了字符串。如果它是空的,那么(并且只有到那时)您才能进一步检查它是否为空。i、 e String name = null;

使用if语句检查字符串是否为空时,使用string=null或string.isEmpty()是否有任何区别

即:

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

isEmpty()
检查是否有空字符串
“”


如果在
null
实例上调用
isEmpty()
,它将抛出
NullPointerException
,变量
name
不是字符串。它是对字符串的引用

因此,空检查确定
名称
是否实际引用了
字符串
。如果它是空的,那么(并且只有到那时)您才能进一步检查它是否为空。i、 e

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

这是两种不同的情况。请注意,如果不先检查空值,则会尝试调用空引用上的方法,这时会出现可怕的
NullPointerException

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

  • 如果s是空字符串,表达式
    s==null
    将返回
    false
  • 如果字符串为null,则第二个版本将抛出
    NullPointerException
下面的表格显示了这些差异:

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

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

如果应用此代码:

if(name.isEmpty())
{
    //do something
}
name
为空时,您将得到
NullPointerException

null
检查通常显示是否存在对象。

isEmpty
检查显示现有
字符串
对象的内容是否为空。

查看java版本的源代码

例如,在openjdk-7中:

119/**计数是字符串中的字符数*/
120私人最终整数计数;
663       /**
664*当且仅当{@link#length()}为0时返回true。
665        *
666*@如果{@link#length()}为0,则返回true,否则返回
667*错误
668        *
669*@自1.6
670        */
671公共布尔值isEmpty(){
672返回计数==0;
673       }
i空检查字符串“”。 最佳做法是检查:

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

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

这样,你总能得到你想要的答案:

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

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

           return bTrueOrFalse;
        }

空字符串不是
null
,而是
isEmpty()
它们是不可互换的,因为它们之间没有任何相似之处,所以没有必要比较它们的性能。顺便说一句:如果一个特殊的方法和一个操作符做了同样的事情,为什么你会有一个特殊的方法呢?在第二秒钟,你会得到NullPointerException,我喜欢@mark byers的表,并且会把它添加为一个.NET的家伙,我错过了stringvalue。IsNullOrEmpty()返回一个布尔值。所以我把它添加到一个helper类:
公共静态布尔值IsNullOrEmpty(String value){return(value==null | | |(value!=null&&value.isEmpty());}
现在在应用程序代码中,我不需要再担心构造:
如果(helper.IsNullOrEmpty(mystring)){//do something}
@TonyG您不需要
值!=null
因为java
如果
s是懒惰的:如果它达到了这一点,它就已经不是null了,您可以安全地对值运行
.isEmpty()
。可怕的解释:)欢迎来到StackOverflow!请编辑您的答案,为代码添加解释。这个问题已经有七年历史了,已经有了一个公认的答案。添加解释将使您的答案更接近其他答案的质量,并使您的答案不太可能被删除。太好了!请直接在问题中添加您的解释,而不是在问题下方添加注释
  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       }
if (str != null && !str.isEmpty() {
   // process string
}
      public boolean StringIsNull(String pi_sChaine)
        {  boolean bTrueOrFalse = true;

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

           return bTrueOrFalse;
        }