这可能听起来像一个真正的愚蠢问题,但请耐心等待:)
所以我的代码中有一个if条件,例如if ((msgBO.getEmpId().equals("") == false )) {
// do something
}
我的问题是,如果我将上述语句设为msgBO.getEmpId().equals(null) == false
它会有什么不同或者这样我试图比较两种不同的东西吗?
答案 0 :(得分:7)
是的,""
(空字符串)和null
之间存在很大差异(根本没有字符串)。
任何对象引用都可以指向null
。这代表“没有数据”或“没有”。空字符串""
表示没有长度的字符串。
以下是一个例子:
String one = null;
String two = "";
int oneLength = one.length();
int twoLength = two.length();
第一次拨打length
会抛出NullPointerException
。第二个将返回0
。
答案 1 :(得分:2)
这些是不同的东西。特别是测试
msgBO.getEmpId.equals(null) == false
a.k.a。
!msgBO.getEmpId.equals(null)
保证始终成功(至少,如果所涉及的equals
方法是根据标准规则集编写的),因为任何对象都不允许比较等于null
:
对于任何非空引用值x,x.equals(null)应返回false。
所以,换句话说,如果您已经知道msgBO.getEmpId != null
,那么您也知道调用equals
的结果。除非您知道msgBO.getEmpId != null
,否则调用equals
是NullPointerException
等待发生。所以,经常会看到:
msgBO.getEmpId != null && msgBO.getEmpId.equals("...stuff...")
甚至
"...stuff...".equals(msgBO.getEmpId)
答案 2 :(得分:0)
""
(空字符串)和null
不一样。 <{1}}上的.equals(null)
将永远不会返回true。
答案 3 :(得分:0)
null
引用和长度为0的String是Java中两个完全不同的东西。另外两点:
getEmpId
要么是缺少方法调用大括号的getter方法,要么是公共字段,这通常是不赞成的(在这种情况下命名很差)。getEmpId
/返回null
,则在其上调用equals()
会导致NullPointerException
- 这就是为什么在与文字字符串进行比较时应该反转比较: if("foo".equals(variable))
==
显式比较布尔表达式很难看。相反,您可以使用否定:if(!msgBO.getEmpId.equals(""))
或if(!msgBO.getEmpId != null)
答案 4 :(得分:0)
他们是不同的,你想要的是
msgBO.getEmpId == null
对于另一个案例
答案 5 :(得分:0)
确实有所作为。
msgBO.getEmpId.equals("")
将msgBO.getEmpId
与空String
msgBO.getEmpId.equals(null)
将msgBO.getEmpId
与null
值进行比较。这是错误的,因为如果NullPointerException
为msgBO.getEmpId
,它会抛出null
。如果要检查值是否为null,则应使用此类条件:msgBO.getEmpId == null
。
在这种情况下,正确的取决于msgBO.getEmpId
返回的值的类型。如果不是String
,那么仅与null
进行比较是有道理的。如果它是String
两个值可能都有意义,那么它取决于您如何表示msgBO.getEmpId
的空值。在这种情况下,如果您使用null
作为空值,则应与null
进行比较,如果您使用""
作为空值,则应与""
进行比较。
答案 6 :(得分:0)
您正在尝试比较两种不同的东西。它可能仍然有效,但是一个是检查空字符串,另一个是检查变量是否为空。
同样快速检查字符串是否为空只是检查
if (string.length == 0).
(但是,如果字符串为null,则会出现异常,因此如果执行null检查则不执行此操作,除非您希望处理带有捕获异常的null情况。)