我正在处理现有代码,我发现一个奇怪的行为,同时检查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?
答案 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不为空且不为空
答案 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.
答案 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>