JAVA中空字符串的奇怪行为

时间:2016-02-16 11:03:10

标签: java string

我正在处理现有代码,我发现一个奇怪的行为,同时检查String是null还是Empty。现有代码:

System.out.println("Length: " + value.length());
if (value != null && value != "") {
   //code
}

输出:

Length: 0

但if语句变为true并执行代码。

当我用这个替换if语句时:

if (value != null && value.length() > 0) {
   //code
}

完美无缺。知道为什么前一个失败了,为什么值!="" 会返回true?

8 个答案:

答案 0 :(得分:3)

尝试使用equals这样的方法:

   if (value != null && !"".equals(value)) {

答案 1 :(得分:2)

String不会像这样比较:

value != ""

使用equals

!"".equals(value)

isEmpty

!value.isEmpty()

因为String是不可变的

答案 2 :(得分:1)

使用==时,您正在比较不相等的引用,这就是表达式求值为真的原因。

您可以使用StringUtils.isNotEmpty

if (StringUtils.isNotEmpty(value)) {
...
}

true - 如果String不为空且不为空

Reference

答案 3 :(得分:1)

您应该与value.isEmpty()进行比较。根据{{​​3}},它还会比较长度。

您对!=所做的是比较参考,而不是相等。

答案 4 :(得分:0)

String是java中的Object,因此您无法使用==!=,因为==!=比较参考,这是不相等的。使用"".equals(value)

答案 5 :(得分:0)

value != ""

检查引用相等而不是值相等。

如果value创建如下:

String  value=new String("");

那么病情很可能会失败。

例如,如果您有另一个String value2

String value2=new String("");

然后

  value==value2  // is false.

看看这个How do I compare strings in Java?

答案 6 :(得分:0)

这是因为您可能使用new运算符创建了值变量:

String value = new String();

现在如果您使用以下内容:

System.out.println("Length: " + value.length());
if (value != null && value != "") {
     System.out.println("hi")
}

它将打印hi,因为值来自堆,而文字“”来自字符串池,您正在进行参考比较。请改用equals方法。

答案 7 :(得分:0)

你最好的选择是使用value != null && !value.isEmpty(),尽管你可以使用 Yoda Expression

"".equals(value)

可以节省您输入null的显式检查。

您无法使用==,因为这会比较对象引用值(即使字符串看起来相同也可能不同),字符串内容。< / p>