空比较

时间:2011-01-19 16:57:10

标签: java

这可能听起来像一个真正的愚蠢问题,但请耐心等待:) 所以我的代码中有一个if条件,例如if ((msgBO.getEmpId().equals("") == false )) { // do something }我的问题是,如果我将上述语句设为msgBO.getEmpId().equals(null) == false 它会有什么不同或者这样我试图比较两种不同的东西吗?

7 个答案:

答案 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。

Documentation of equals

所以,换句话说,如果您已经知道msgBO.getEmpId != null,那么您也知道调用equals的结果。除非您知道msgBO.getEmpId != null,否则调用equalsNullPointerException等待发生。所以,经常会看到:

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.getEmpIdnull值进行比较。这是错误的,因为如果NullPointerExceptionmsgBO.getEmpId,它会抛出null。如果要检查值是否为null,则应使用此类条件:msgBO.getEmpId == null

在这种情况下,正确的取决于msgBO.getEmpId返回的值的类型。如果不是String,那么仅与null进行比较是有道理的。如果它是String两个值可能都有意义,那么它取决于您如何表示msgBO.getEmpId的空值。在这种情况下,如果您使用null作为空值,则应与null进行比较,如果您使用""作为空值,则应与""进行比较。

答案 6 :(得分:0)

您正在尝试比较两种不同的东西。它可能仍然有效,但是一个是检查空字符串,另一个是检查变量是否为空。

同样快速检查字符串是否为空只是检查

if (string.length == 0).

(但是,如果字符串为null,则会出现异常,因此如果执行null检查则不执行此操作,除非您希望处理带有捕获异常的null情况。)