2010-05-27 23 views

回答

24
s == null 

将不起作用?

+3

@ k38:如果你想比较**值**,那么你“only”必须使用'equals()'。但是,如果你想检查一个变量是否为'null',则使用'=='。 – 2010-05-27 11:16:50

15

当然有效。你错过了代码的重要部分。您需要做的仅仅是这样的:

boolean isNull = false; 
try { 
    stringname.equalsIgnoreCase(null); 
} catch (NullPointerException npe) { 
    isNull = true; 
} 

;)

+32

+1 - 是** EVIL **。 – 2010-05-27 11:23:03

+13

如果你读到这里,请认识到@aioobe在开玩笑;你不应该这样做。 – 2010-05-27 14:14:24

+5

-1 for being – chburd 2010-05-27 14:28:59

3

我不知道什么是错的MYYN的答案。

if (yourString != null) { 
    //do fun stuff with yourString here 
} 

上面的空检查是非常好的。

如果你想检查一个String引用是相等的(不区分大小写)到另一个字符串,你知道是不是一个空引用,然后做这样的事情:

String x = "this is not a null reference" 
if (x.equalsIgnoreCase(yourStringReferenceThatMightBeNull)) { 
    //do fun stuff 
} 

如果有如果您对两个正在比较的字符串是否有空引用存在疑问,则需要检查其中至少一个字符串是否为空引用,以避免发生NullPointerException异常。

5

如果我们看一下equalsIgnoreCase方法的实现,我们发现这部分:

if (string == null || count != string.count) { 
    return false; 
} 

所以它总是返回false如果该参数null。这显然是正确的,因为它应该返回true的唯一情况是,当equalsIgnoreCase是在null String调用,但

String nullString = null; 
nullString.equalsIgnoreCase(null); 

肯定会导致一个NullPointerException。

所以equals方法不是用来测试一个对象是否为空,只是因为你不能在null上调用它们。

-1

好了,最后一次有人问这个傻问题,得到的答复是:

someString.equals("null") 

这种“修复”隐藏的仅仅是如何null成为摆在首位"null"更大的问题,虽然。

+0

它不 - 这是不是一个修复,而不是一个有用的答案。 – 2014-06-05 15:57:34

+0

我想成为第一个说:“wat” – 2014-12-31 16:39:01

+0

这个不回答的问题 – 2016-05-14 02:37:35

138

string == null比较对象是否为空。 string.equals("foo")比较该对象内部的值。 string == "foo"并不总是有效,因为您试图查看对象是否相同,而不是它们所代表的值。


较长的答案:

如果你试试这个,这是行不通的,因为你已经发现:

String foo = null; 
if (foo.equals(null)) { 
    // That fails every time. 
} 

的原因是,foo是零,所以也没有知道.equals是什么;没有任何对象可以从中调用.equals。

什么你可能想要的是:

String foo = null; 
if (foo == null) { 
    // That will work. 
} 

用绳子打交道时,守卫自己免受空的典型方式是:

String foo = null; 
String bar = "Some string"; 
... 
if (foo != null && foo.equals(bar)) { 
    // Do something here. 
} 

这样,如果FOO为空,这不是”对条件的后半部分进行评估,事情都是正确的。

最简单的办法,如果你使用一个字符串(而不是一个变量),方法是:

String foo = null; 
... 
if ("some String".equals(foo)) { 
    // Do something here. 
} 

如果你想解决的是,Apache的共同性有一类 - StringUtils - 提供空值安全的字符串操作。

if (StringUtils.equals(foo, bar)) { 
    // Do something here. 
} 

另一个反应是开玩笑的,说你应该这样做:

boolean isNull = false; 
try { 
    stringname.equalsIgnoreCase(null); 
} catch (NullPointerException npe) { 
    isNull = true; 
} 

请不要那样做。你应该只抛出异常的例外;如果你期望一个空值,你应该提前检查它,而不要让它抛出异常。

在我的脑海里,有两个原因。首先,例外情况缓慢;检查null是很快的,但是当JVM抛出一个异常时,需要很多时间。其次,如果您提前检查空指针,代码更容易阅读和维护。

+2

你错过了Yoda版本,每次也都有效: if(“foo”.equalsIgnoreCase(string)) – 2010-05-27 14:26:06

+0

@Omry;很好的捕获,将增加。 – 2010-05-27 14:58:13

+2

好帮助的解释。感谢您的好玩。 – 2012-09-12 13:48:46

4

这看起来有点奇怪,但是...

stringName == null || "".equals(stringName) 

从来没有做这种方式的任何问题,再加上它的检查,同时避免潜在的空点异常更安全的方式。

+0

小心NullPointer在这种情况下第二个条件应该是第一个。 – Pawan 2013-02-03 04:54:41

2

如果字符串为“空”值,那么你可以使用

if(null == stringName){ 

    [code] 

} 

else 

[Error Msg] 
+3

为什么null == stringName而不是stringName == null?我认为没有区别,但为什么这是首选(我见过很多)。我的首选是读命令LTR所以stringName == null,但想知道别人的想法。 – 2013-09-13 08:39:48

+6

通常情况下,你把变量放在右边,这样你就不会错误地初始化变量:null = stringName产生一个编译错误,而stringName = null将是可能的 – Sarajog 2013-09-20 12:39:56

+3

根本不是“正常”许多人明确禁止它,因为阅读代码库的人看起来不太自然。 – RichieHH 2014-03-05 11:52:44

0

我意识到这是很久以前的回答,但我还没有看到这个贴,所以我想我会分享什么我做。这不是代码的可读性特别好,但如果你有做了一系列的null检查的,我喜欢用:

String someString = someObject.getProperty() == null ? "" : someObject.getProperty().trim(); 

在这个例子中,修整被称为弦上,这将引发如果字符串为空或空格,则为NPE,但在同一行上,可以检查为空或空白,因此如果块没有大量(更多)难以格式化的结果。

+0

你是什么意思检查空或空白?你只在这里检查null。空白是“COND?A:B”的可能回报之一。构建,对吗? – 2014-12-31 16:37:34

1

当然user351809,stringname.equalsignorecase(null)会抛出NullPointerException。
看,你有一个字符串对象stringname,随后2个可能的条件: -

  1. stringname有一些非空字符串值(比如“计算机”):
    您的代码将正常工作,因为它需要表格
    "computer".equalsignorecase(null)
    并且您得到的预期响应为false
  2. stringnamenull值:
    这里你的代码将被卡住,因为
    null.equalsignorecase(null)
    然而,似乎擅长先来看看,你可能希望响应,true
    但是,null不是一个对象,可以执行equalsignorecase()方法。

因此,你得到的异常是由于案件2
我建议你什么是简单地使用stringname == null

-1

有两种方法可以做到it..Say 字符串== NULLstring.equals() ..

public class IfElse { 

    public int ifElseTesting(String a){ 
     //return null; 
     return (a== null)? 0: a.length(); 
    } 

} 

public class ShortCutifElseTesting { 

    public static void main(String[] args) { 

     Scanner scanner=new Scanner(System.in); 
     System.out.println("enter the string please:"); 
     String a=scanner.nextLine(); 
     /* 
     if (a.equals(null)){ 
      System.out.println("you are not correct"); 
     } 
     else if(a.equals("bangladesh")){ 
      System.out.println("you are right"); 
     } 
     else 
      System.out.println("succesful tested"); 

     */ 
     IfElse ie=new IfElse(); 
     int result=ie.ifElseTesting(a); 
     System.out.println(result); 

    } 

} 

入住这example..Here是的。如果否则的快捷版本另一个例子..

+1

不! .equals()不能与可能为空的对象一起使用,因此引导式解释是错误的。而这个答案的其余部分似乎毫无意义,与所问的问题无关。 – 2014-06-05 15:54:52

8

使用TextUtils方法。

TextUtils.isEmpty(str):如果字符串为null或0长度,则返回true。 参数: str中的字符串进行检查 返回: true,如果str为null或零长度

if(TextUtils.isEmpty(str)) { 
     // str is null or lenght is 0 
    } 

以下是该方法的source code

/** 
    * Returns true if the string is null or 0-length. 
    * @param str the string to be examined 
    * @return true if str is null or zero length 
    */ 
    public static boolean isEmpty(CharSequence str) { 
     if (str == null || str.length() == 0) 
      return true; 
     else 
      return false; 
    } 
0

进口它在你的类

import org.apache.commons.lang.StringUtils; 

然后使用它们,它们都会返回true

System.out.println(StringUtils.isEmpty("")); 
System.out.println(StringUtils.isEmpty(null)); 
2

你可以用字符串== NULL

这对我的作品

String foo = null; 
    if(foo == null){ 
     System.out.println("String is null"); 
    } 
1

简单的方法来检查:

public static boolean isBlank(String value) { 
    return (value == null || value.equals("") || value.equals("null") || value.trim().equals("")); 
} 
+0

非常好,兄弟! – 2017-12-21 06:03:26

1

如果返回value为null,用途:

if(value.isEmpty()); 

有时在java中检查null,if(value == null),即使String为null,它也可能不成立。

+1

使用Scala(与Java)'if(value.isEmpty())'给出'NullPointerException'。在这种情况下,使用'if(value == null)'更好' – 2017-06-06 15:07:09

+0

这绝对是错误的,因为如果它为空,它总会抛出NPE。 – Roger 2018-01-05 21:11:59