如何检查我的字符串是否等于null?

时间:2010-04-08 17:15:11

标签: java string null equals conditional-operator

我想只在我的字符串有一个有意义的值时执行一些操作。所以,我试过了。

if (!myString.equals("")) {
doSomething
}

和这个

if (!myString.equals(null)) {
doSomething
}

和这个

if ( (!myString.equals("")) && (!myString.equals(null))) {
doSomething
}

和这个

if ( (!myString.equals("")) && (myString!=null)) {
doSomething
}

和这个

if ( myString.length()>0) {
doSomething
}

在所有情况下我的程序doSomething尽管我的字符串是EMPTY。它等于null。那么,那有什么问题?

增加:

我找到了问题的原因。该变量被声明为一个字符串,因此,分配给该变量的null被转换为"null"!所以,if (!myString.equals("null"))有效。

27 个答案:

答案 0 :(得分:219)

if (myString != null && !myString.isEmpty()) {
  // doSomething
}

作为进一步的评论,您应该了解equals合同中的这个术语:

来自Object.equals(Object)

  

对于任何非空引用值xx.equals(null)应为return false

null进行比较的方法是使用x == nullx != null

此外,如果x.fieldx.method()NullPointerException会引发x == null

答案 1 :(得分:26)

如果myStringnull,则调用myString.equals(null)myString.equals("")将失败并显示NullPointerException。您无法在空变量上调用任何实例方法。

首先检查null,如下所示:

if (myString != null && !myString.equals("")) {
    //do something
}

如果.equals无法进行空检查,则short-circuit evaluation使用{{3}}不会尝试myString

答案 2 :(得分:18)

Apache commons StringUtils.isNotEmpty是最好的方式。

答案 3 :(得分:10)

如果myString实际上为null,那么对引用的任何调用都将失败,并带有Null Pointer Exception(NPE)。 从java 6开始,使用#isEmpty而不是长度检查(在任何情况下都不要用支票创建一个新的空字符串)。

if (myString !=null &&  !myString.isEmpty()){
    doSomething();
}

顺便说一句,如果像你一样比较字符串文字,则会颠倒语句,以便不必进行空检查,即

if (("some string to check").equals(myString)){
  doSomething();
} 

而不是:

if (myString !=null &&  !myString.equals("some string to check")){
    doSomething();
}

答案 4 :(得分:6)

工作!!!!

if (myString != null && !myString.isEmpty()) {
    return true;
}
else {
    return false;
}

答案 5 :(得分:5)

您需要检查myString对象是否为null

if (myString != null) {
    doSomething
}

答案 6 :(得分:5)

如果你的字符串为null,那么这样的调用应该抛出NullReferenceException:

myString.equals(空)

但无论如何,我认为这样的方法就是你想要的:

public static class StringUtils
{
    public static bool isNullOrEmpty(String myString)
    {
         return myString == null || "".equals(myString);
    }
}

然后在您的代码中,您可以执行以下操作:

if (!StringUtils.isNullOrEmpty(myString))
{
    doSomething();
}

答案 7 :(得分:4)

 if (myString != null && myString.length() > 0) {

        // your magic here

 }

很明显,如果你正在做很多字符串操作,那么有一个很棒的Spring类,它有各种有用的方法:

http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/util/StringUtils.html

答案 8 :(得分:4)

我鼓励使用现有的实用程序,或创建自己的方法:

public static boolean isEmpty(String string) {
    return string == null || string.length() == 0;
}

然后在需要时使用它:

if (! StringUtils.isEmpty(string)) {
  // do something
}

如上所述,||和&&运营商短路。这意味着一旦他们能够确定他们的价值,他们就会停止。因此,如果(string == null)为true,则不需要计算长度部分,因为表达式始终为true。与&&同样,如果左侧为假,则表达式始终为false,无需进一步评估。

作为补充说明,使用长度通常比使用.equals更好。性能略好(不多),并且不需要创建对象(尽管大多数编译器可能会优化它)。

答案 9 :(得分:4)

每次我必须处理字符串(几乎每次)我停下来想知道哪种方式是检查空字符串的最快方法。当然string.Length == 0检查应该是最快的,因为Length是一个属性,除了检索属性的值之外,不应该有任何处理。但后来我问自己,为什么会有一个String.Empty?检查String.Empty应该比检查长度更快,我告诉自己。好吧,我最终决定测试它。我编写了一个小型Windows控制台应用程序,告诉我对1000万次重复进行某项检查需要多长时间。我检查了3个不同的字符串:NULL字符串,空字符串和“”字符串。我使用了5种不同的方法:String.IsNullOrEmpty(),str == null,str == null || str == String.Empty,str == null || str ==“”,str == null || str.length == 0.以下是结果:

String.IsNullOrEmpty()
NULL = 62 milliseconds
Empty = 46 milliseconds
"" = 46 milliseconds

str == null
NULL = 31 milliseconds
Empty = 46 milliseconds
"" = 31 milliseconds

str == null || str == String.Empty
NULL = 46 milliseconds
Empty = 62 milliseconds
"" = 359 milliseconds

str == null || str == ""
NULL = 46 milliseconds
Empty = 343 milliseconds
"" = 78 milliseconds

str == null || str.length == 0
NULL = 31 milliseconds
Empty = 63 milliseconds
"" = 62 milliseconds

根据这些结果,平均检查str == null是最快的,但可能并不总是产生我们正在寻找的东西。 if str = String.Emptystr = "",会导致错误。然后你有2个并列第二位:String.IsNullOrEmpty()str == null || str.length == 0。由于String.IsNullOrEmpty()看起来更好,编写更容易(也更快),我建议将其用于其他解决方案。

答案 10 :(得分:4)

尝试,

myString!=null && myString.length()>0

答案 11 :(得分:3)

我会做这样的事情:

( myString != null && myString.length() > 0 )
    ? doSomething() : System.out.println("Non valid String");
  • 测试null检查myString是否包含String的实例。
  • length()返回长度,等于equals(“”)。
  • 首先检查myString是否为null将避免NullPointerException。

答案 12 :(得分:3)

我一直在使用StringUtil.isBlank(string)

它测试字符串是否为空:null,emtpy或只有空格。

所以到目前为止这个是最好的

以下是docs中的orignal方法

/**
    * Tests if a string is blank: null, emtpy, or only whitespace (" ", \r\n, \t, etc)
    * @param string string to test
    * @return if string is blank
    */
    public static boolean isBlank(String string) {
        if (string == null || string.length() == 0)
            return true;

        int l = string.length();
        for (int i = 0; i < l; i++) {
            if (!StringUtil.isWhitespace(string.codePointAt(i)))
                return false;
        }
        return true;
    } 

答案 13 :(得分:2)

if(str.isEmpty() || str==null){ do whatever you want }

答案 14 :(得分:2)

这应该有效:

if (myString != null && !myString.equals(""))
    doSomething
}

如果没有,那么myString可能有一个你不期望的值。尝试将其打印出来:

System.out.println("+" + myString + "+");

使用'+'符号围绕字符串将显示您是否有额外的空白,而您没有考虑。

答案 15 :(得分:2)

对我来说,最好检查字符串中是否有任何有意义的Java内容:

string != null && !string.trim().isEmpty()

首先检查字符串是否为null以避免NullPointerException,然后修剪所有空格字符以避免检查只有空格的字符串,最后检查修剪后的字符串是否为空,即长度为0。

答案 16 :(得分:1)

好的,这就是数据类型在Java中的工作方式。 (你不得不原谅我的英语,我很遗憾。没有使用正确的词汇。 你必须区分其中两个。基本数据类型和普通数据类型。基本数据类型几乎构成了存在的所有内容。 例如,有所有数字,char,boolean等。 普通数据类型或复杂数据类型是其他所有内容。 String是一个字符数组,因此是一种复杂的数据类型。

您创建的每个变量实际上都是指向内存中值的指针。 例如:

String s = new String("This is just a test");

变量“s”不包含字符串。这是一个指针。该指针指向内存中的变量。 当您调用System.out.println(anyObject)时,将调用该对象的toString()方法。如果它没有从Object覆盖toString,它将打印指针。 例如:

public class Foo{
    public static void main(String[] args) {
        Foo f = new Foo();
        System.out.println(f);
    }
}

>>>>
>>>>
>>>>Foo@330bedb4

“@”后面的所有内容都是指针。这仅适用于复杂数据类型。原始数据类型直接保存在其指针中。所以实际上没有指针,值直接存储。

例如:

int i = 123;

在这种情况下我不存储指针。我将存储整数值123(以字节为单位)。

好的,让我们回到==运营商。 它总是比较指针而不是内存中指针位置保存的内容。

示例:

String s1 = new String("Hallo");
String s2 = new String("Hallo");

System.out.println(s1 == s2);

>>>>> false

这两个String都有不同的指针。然而,String.equals(String other)比较内容。您可以将原始数据类型与'=='运算符进行比较,因为具有相同内容的两个不同对象的指针是相等的。

Null意味着指针为空。默认情况下,空原始数据类型为0(对于数字)。但是,对于任何复杂对象,Null意味着该对象不存在。

问候

答案 17 :(得分:1)

我总是这样使用:

if (mystr != null && !mystr.isEmpty()){
  //DO WHATEVER YOU WANT OR LEAVE IT EMPTY
}else {
  //DO WHATEVER YOU WANT OR LEAVE IT EMPTY
}

或者您可以将其复制到您的项目中:

private boolean isEmptyOrNull(String mystr){
    if (mystr != null && !mystr.isEmpty()){ return true; }
    else { return false; }
}

,然后像这样调用它:

boolean b = isEmptyOrNull(yourString);

如果为空或为空,将返回true。
b=true如果为空或为空

或者您可以使用try catch并在其为空时捕获。

答案 18 :(得分:1)

在Android中,您可以使用isEmpty

中的实用方法TextUtils进行检查
public static boolean isEmpty(CharSequence str) {
    return str == null || str.length() == 0;
}

isEmpty(CharSequence str)方法检查条件,null和长度。

答案 19 :(得分:1)

我更喜欢使用:

if(!StringUtils.isBlank(myString)) { // checks if myString is whitespace, empty, or null
    // do something
}

阅读StringUtils.isBlank() vs String.isEmpty()

答案 20 :(得分:1)

我在android中遇到了这个问题,我使用这种方式(为我工作):

String test = null;
if(test == "null"){
// Do work
}

但在java代码中我使用:

String test = null;
if(test == null){
// Do work
}

并且:

private Integer compareDateStrings(BeanToDoTask arg0, BeanToDoTask arg1, String strProperty) {
    String strDate0 = BeanUtils.getProperty(arg0, strProperty);_logger.debug("strDate0 = " + strDate0);
    String strDate1 = BeanUtils.getProperty(arg1, strProperty);_logger.debug("strDate1 = " + strDate1);
    return compareDateStrings(strDate0, strDate1);
}

private Integer compareDateStrings(String strDate0, String strDate1) {
    int cmp = 0;
    if (isEmpty(strDate0)) {
        if (isNotEmpty(strDate1)) {
            cmp = -1;
        } else {
            cmp = 0;
        }
    } else if (isEmpty(strDate1)) {
        cmp = 1;
    } else {
        cmp = strDate0.compareTo(strDate1);
    }
    return cmp;
}

private boolean isEmpty(String str) {
    return str == null || str.isEmpty();
}
private boolean isNotEmpty(String str) {
    return !isEmpty(str);
}

答案 21 :(得分:0)

我尝试了上面给出的大多数示例,因为我在Android应用程序中构建了一个null并且IT全部失败了。所以我想出了一个适合我的解决方案。

String test = null+"";
If(!test.equals("null"){
       //go ahead string is not null

}

所以简单地连接一个空字符串,如上所述,并测试&#34; null&#34;它工作正常。事实上没有抛出异常

答案 22 :(得分:0)

例外也可能有所帮助:

try {
   //define your myString
}
catch (Exception e) {
   //in that case, you may affect "" to myString
   myString="";
}

答案 23 :(得分:0)

您可以使用以下方法检查字符串是否为null:

String Test = null;
(Test+"").compareTo("null")

如果结果为0则(Test +“”)=“null”。

答案 24 :(得分:0)

我认为myString不是字符串而是字符串数组。以下是您需要做的事情:

{{1}}

答案 25 :(得分:0)

如果您使用的是Android,则可以使用简单的TextUtils类。 检查以下代码:

if(!TextUtils.isEmpty(myString)){
 //do something
}

这是简单的代码用法。答案可能会重复。但是为您进行一次简单的检查很简单。

答案 26 :(得分:-5)

您必须使用null if(str != null).

进行检查