Rom*_*man 166 java string null equals conditional-operator
我想只在我的字符串有一个有意义的值时执行一些操作.所以,我试过这个.
if (!myString.equals("")) {
doSomething
}
Run Code Online (Sandbox Code Playgroud)
还有这个
if (!myString.equals(null)) {
doSomething
}
Run Code Online (Sandbox Code Playgroud)
还有这个
if ( (!myString.equals("")) && (!myString.equals(null))) {
doSomething
}
Run Code Online (Sandbox Code Playgroud)
还有这个
if ( (!myString.equals("")) && (myString!=null)) {
doSomething
}
Run Code Online (Sandbox Code Playgroud)
还有这个
if ( myString.length()>0) {
doSomething
}
Run Code Online (Sandbox Code Playgroud)
在所有情况下,我的程序doSomething尽管我的字符串是空的.它等于null.那么,那有什么问题?
添加:
我找到了问题的原因.该变量被声明为一个字符串,因此,null分配给该变量的变换为"null"!所以,if (!myString.equals("null"))有效.
pol*_*nts 226
if (myString != null && !myString.isEmpty()) {
// doSomething
}
Run Code Online (Sandbox Code Playgroud)
作为进一步的评论,您应该知道equals合同中的这个术语:
对于任何非空引用值
x,x.equals(null)应该return false.
比较的方法null是使用x == null和x != null.
此外,x.field并x.method()抛出NullPointerException如果x == null.
Mic*_*ers 26
如果myString是null,则调用myString.equals(null)或myString.equals("")将失败NullPointerException.您不能在null变量上调用任何实例方法.
首先检查null,如下所示:
if (myString != null && !myString.equals("")) {
//do something
}
Run Code Online (Sandbox Code Playgroud)
这使得短路评估不会尝试.equalsif myString无效的空检查.
小智 19
Apache commons StringUtils.isNotEmpty是最好的方式.
小智 10
如果myString实际上为null,那么对引用的任何调用都将失败并出现Null Pointer Exception(NPE).从java 6开始,使用#isEmpty而不是length检查(在任何情况下都不要使用check创建一个新的空String).
if (myString !=null && !myString.isEmpty()){
doSomething();
}
Run Code Online (Sandbox Code Playgroud)
顺便提一下,如果像你一样比较字符串文字,则会反转语句,以便不必进行空检查,即
if (("some string to check").equals(myString)){
doSomething();
}
Run Code Online (Sandbox Code Playgroud)
代替 :
if (myString !=null && !myString.equals("some string to check")){
doSomething();
}
Run Code Online (Sandbox Code Playgroud)
工作!!!!
if (myString != null && !myString.isEmpty()) {
return true;
}
else {
return false;
}
Run Code Online (Sandbox Code Playgroud)
您需要检查myString对象是否null:
if (myString != null) {
doSomething
}
Run Code Online (Sandbox Code Playgroud)
尝试,
myString!=null && myString.length()>0
Run Code Online (Sandbox Code Playgroud)
如果您的字符串为null,那么这样的调用应该抛出NullReferenceException:
myString.equals(空)
但无论如何,我认为这样的方法是你想要的:
public static class StringUtils
{
public static bool isNullOrEmpty(String myString)
{
return myString == null || "".equals(myString);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的代码中,您可以执行以下操作:
if (!StringUtils.isNullOrEmpty(myString))
{
doSomething();
}
Run Code Online (Sandbox Code Playgroud)
if (myString != null && myString.length() > 0) {
// your magic here
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果您要进行大量字符串操作,那么有一个很棒的 Spring 类,其中包含各种有用的方法:
http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/util/StringUtils.html
我鼓励使用现有的实用程序,或创建自己的方法:
public static boolean isEmpty(String string) {
return string == null || string.length() == 0;
}
Run Code Online (Sandbox Code Playgroud)
然后在需要时使用它:
if (! StringUtils.isEmpty(string)) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
如上所述, || 和 && 运算符短路。这意味着一旦他们可以确定自己的价值,他们就会停止。因此,如果 (string == null) 为真,则不需要计算长度部分,因为表达式始终为真。与 && 类似,如果左侧为假,则表达式始终为假,无需进一步求值。
作为附加说明,使用长度通常比使用 .equals 更好。性能稍微好一些(不多),并且不需要创建对象(尽管大多数编译器可能会对此进行优化)。
小智 5
每次我必须处理字符串(几乎每次)时,我都会停下来想知道哪种方法才是检查空字符串的最快方法。当然, string.Length == 0 检查应该是最快的,因为 Length 是一个属性,除了检索属性的值之外不应该进行任何处理。但后来我问自己,为什么会有 String.Empty?我告诉自己,检查 String.Empty 应该比检查长度更快。好吧,我最终决定测试一下。我编写了一个小型 Windows 控制台应用程序,它告诉我对 1000 万次重复进行某项检查需要多长时间。我检查了 3 个不同的字符串:一个 NULL 字符串、一个空字符串和一个“”字符串。我使用了 5 种不同的方法:String.IsNullOrEmpty()、str == null、str == null || str == String.Empty,str == null || str == "", str == null || str.length == 0。结果如下:
String.IsNullOrEmpty()
NULL = 62 milliseconds
Empty = 46 milliseconds
"" = 46 milliseconds
str == null
NULL = 31 milliseconds
Empty = 46 milliseconds
"" = 31 milliseconds
str == null || str == String.Empty
NULL = 46 milliseconds
Empty = 62 milliseconds
"" = 359 milliseconds
str == null || str == ""
NULL = 46 milliseconds
Empty = 343 milliseconds
"" = 78 milliseconds
str == null || str.length == 0
NULL = 31 milliseconds
Empty = 63 milliseconds
"" = 62 milliseconds
Run Code Online (Sandbox Code Playgroud)
根据这些结果,平均检查速度str == null是最快的,但可能并不总是能得到我们想要的结果。if str = String.Empty或str = "",结果为 false。然后你有 2 个并列第二位:String.IsNullOrEmpty()和str == null || str.length == 0。由于String.IsNullOrEmpty()看起来更好并且更容易(并且更快)编写,因此我建议使用它而不是其他解决方案。
| 归档时间: |
|
| 查看次数: |
465933 次 |
| 最近记录: |