2016-02-16 79 views
0

我正在处理现有代码,并且在检查字符串时发现奇怪行为为空或空。现有代码:JAVA中空字符串的奇怪行为

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

输出:

Length: 0 

但是,if语句为真及其执行代码。

当我更换了if语句与此一:

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

它完美。任何想法为什么前一个失败,为什么值!=“”返回true?

回答

3

尝试使用equals方法是这样的:

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

好的,但为什么value!=“”返回true? –

+1

@st_ahmed因为==和!=比较引用而不是字符串的内容。 – Rustam

+0

@st_ahmed当然你是对的Rustam,如果你想比较值使用equals() – Abdelhak

2

String s的不比较是这样的:

value != "" 

使用equals

!"".equals(value) 

isEmpty

!value.isEmpty() 

因为String是不可改变的

0

String是Java中的Object,所以你不能使用==!=它,因为==!=比较基准,这是不相等的。使用"".equals(value)

0
value != "" 

检查引用相等是否值相等。

如果value创建这样的:

String value=new String(""); 

然后有一个高的机会,病情会失败。

例如,如果您有其他字符串值2

String value2=new String(""); 

然后

value==value2 // is false. 

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

1

当使用==您比较它们是不相等的参考,这就是为什么表达式评估为真。

您可以使用StringUtils.isNotEmpty

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

true - 如果字符串不是空的,而不是空

Reference

+0

加上一个,这很漂亮,比我的尤达诀窍更清晰。 – Bathsheba

+0

谢谢@芭丝谢芭 – KAD

1

你应该value.isEmpty()比较。根据source code,它也会比较长度。

你在做什么与!=比较引用,而不是相等。

0

这是因为你可能已经使用新的运营商创造价值变量:

String value = new String(); 

所以,现在如果您使用以下:

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

它将打印喜的价值是由堆和文字“ “来自字符串池,并且您正在进行参考比较。改用equals方法。

0

最好的办法是使用value != null && !value.isEmpty(),虽然可以用尤达表达

"".equals(value)

这样可以节省打字出来null明确检查会考。

您不能使用==,因为它会比较对象参考值(即使字符串看起来相同也可能不同),而不是的字符串内容。