Java中各种字符串比较的区别

时间:2010-04-14 15:37:09

标签: java string

这些之间有区别吗?

if(myString.equals("")){

}

if(myString.equals(null)){

}

if(myString == ""){

}

我有一个字符串,我不知道它是空的还是有一些空间我只是不想阻止它写在数据库中,如果它是无效的(如果是空的或有一些空格)。

8 个答案:

答案 0 :(得分:10)

您的每个示例都彼此不同。

  1. 第一个是一个简单的比较,看看myString是否为空(一个字符串中没有字符)
  2. 第二个始终为false或NullPointerException
  3. 第三个检查变量myString是否引用空字符串常量。如果变量是从空字符串常量显式初始化的话,如果用一些“生成的”空字符串(例如,new StringBuilder().toString())初始化变量然后显式添加,那么情况就是如此使用intern()
  4. 到常量池

    正如评论中所指出的,第一个例子也可能抛出NullPointerException,但不是第三个。

答案 1 :(得分:5)

要实现您想要的目标,请写下:

if (!myString.trim().equals("")) {
    // write to database
}

myString可能null

的可能性
if (myString != null && !myString.trim().equals("")) {
    // write to database
}

答案 2 :(得分:3)

是的。

如果您的字符串为空,则首先返回true。

第二个将永远返回false。

如果您的字符串的定义完全如下,则第三个将返回true:

String myString = "";

请注意,这与案例1不同!第一次测试价值平等,第二次测试身份。

    String myString = "";
    String myOtherString = new String(myString);

    assert myString == "";
    assert myOtherString.equals("");
    assert myOtherString != "";

底线是:

  • 使用第一种情况进行字符串之间的比较,
  • 使用myString == null进行空测试,
  • 从不使用第三个!

答案 3 :(得分:2)

帕克顿已经添加了正确的答案。澄清你的尝试有什么问题:

//true if myString is the empty string. will fail on " "  
if(myString.equals("")){

}

//always false, or fails
//if myString is null, you'll get a NullPointerException
//if it isn't, you'll get false
if(myString.equals(null)){

}

//a bad way to do things with unexpected results.
//when dealing with objects, == is true when each are the same object.
//two different objects that have the same content or value (e.g. clones)
//will return false using this technique
if(myString == ""){

}

答案 4 :(得分:1)

如果您不愿意依赖外部库,您可以使用apache commons StringUtils类,它提供了一个名为“isNotBlank()”的方法,它似乎完全符合您的需要:

Checks if a String is not empty (""), not null and not whitespace only.

StringUtils.isNotBlank(null)      = false
StringUtils.isNotBlank("")        = false
StringUtils.isNotBlank(" ")       = false
StringUtils.isNotBlank("bob")     = true
StringUtils.isNotBlank("  bob  ") = true

请参阅http://commons.apache.org/lang/api/org/apache/commons/lang/StringUtils.html#isBlank%28java.lang.CharSequence%29

答案 5 :(得分:0)

Java中的字符串只是另一个对象。你的第一个比较是最正确的。它将myString与空白进行比较,如果您的字符串也为空(“”),则返回true。第二次比较总是错误的。第三,它比较对象的相等性(将其视为比较对象的地址)。我想总是会返回false,除非你的字符串是String myString =“”(在这一点上不确定)。

答案 6 :(得分:0)

他们都是截然不同的。假设myString为非null,

  1. 如果myString引用的String表示空字符串
  2. ,则返回true
  3. 将永远返回false
  4. 如果myString恰好将String的实例称为“”,则返回true。这可能在你的程序中是正确的,但也可能是假的。

答案 7 :(得分:0)

只需使用Apache Commons StringUtils.isBlank()

编辑:要使用@ zim2001的方法实现您想要的目标,请执行以下操作:

if ( StringUtils.isNotBlank(myString) ) { 
    // write to database 
} 

这比当前接受的答案更容易阅读。 (但请在这里看到其他帖子,以了解使用String的细节。)