Java字符串的空值检查使用!= null还是!str.equals(null)?

4

在Java中检查非空值最好的方法是什么?

String query ="abcd";

query != null!query.equals(null),哪个更好?为什么?

两者的区别在于前者只是检查变量是否为空,后者则会调用equals方法来比较。因此,query != null更加简洁明了,而且执行速度更快。同时,使用!=运算符还可以避免空指针异常。所以说,在大多数情况下,query != null更好。


.equals默认为==,只要它没有被明确地覆盖。 - Jainathan Leung
@JaynathanLeung。你也在谈论String对象吗? - Rohit Jain
@RohitJain 有没有任何不是对象的 String 类型?据我所知,它没有原始类型的等价物... - Jesse Webb
4个回答

26

第一个选项是更好的选择(也是唯一的选择),因为第二个选项在您的值实际上为null时会抛出NPE就这么简单。

试试这个:

String str = null;
str.equals(null);  // will throw `NPE`.

所以基本上,你想要执行的测试在第二种情况下会触发NullPointerException,所以没有选择。


5
NPE是NullPointerException的缩写,对于不熟悉该词汇的人来说。 - Jesse Webb
2
@RohitJain:我执行了以下代码:String test = "aa"; System.out.println(test.equals(null));。输出结果为false - Cratylus
1
@Cratylus - 现在使用 String test = null; 试一试,看看会发生什么... - Jesse Webb
1
@Cratylus,Rohit 的意思是尝试 String s= null; s.equals(null) - PermGenError
1
@Cratylus。如果完全不存在“null”值的可能性,为什么要测试“非空”? 如果存在“null”值的可能性,则在第二种情况下会有“NPE”。 - Rohit Jain
显示剩余4条评论

11

!str.equals(null) 的结果会

  1. 如果它不抛出异常,总是会返回false,
  2. 如果str为null,则会引发异常。

进行空值检查的目的是确保引用,在此代码中为str,实际上指向一个对象。如果它为null,则无法对其调用任何方法,包括equals,否则将引发NullPointerException...这就是进行空值检查的目的。

因此,!str.equals(null)会导致空值检查旨在防止的问题,根本不会产生预期的效果。永远不要这样做。


+1,我也提到了str.equals(null)始终返回false的观点,但我的回答对具体问题不是很清晰.. :) - PermGenError

2

query != null最好改为!query.equals(null),因为当查询实际上为空时,!query.equals(null)会抛出异常。此外,query != null易于阅读。


2

query != null 用于比较对象是否为nullquery.equals("something") 用于比较对象中的值。 string == "something",所以在这种情况下应该使用 query != null


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接