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

Gan*_*row 2 java string

这些之间有区别吗?

if(myString.equals("")){

}

if(myString.equals(null)){

}

if(myString == ""){

}
Run Code Online (Sandbox Code Playgroud)

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

Poi*_*nty 10

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

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

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


paj*_*ton 5

要实现你想要的,写:

if (!myString.trim().equals("")) {
    // write to database
}
Run Code Online (Sandbox Code Playgroud)

或者如果还有myString可能是null:

if (myString != null && !myString.trim().equals("")) {
    // write to database
}
Run Code Online (Sandbox Code Playgroud)