使用isEmpty()检查字符串是否为null

时间:2015-08-13 00:07:19

标签: java

实际上我试图改变特定字符串的空检查,以前是

{{#each controller as |item|}}

这不是检查字符串的正确方法,因为

    {if (empName.equals("") || (empName.equals(null)))
//Do something 
}  

但它没有用。任何人都建议这有什么问题?

2 个答案:

答案 0 :(得分:3)

  

我尝试更改特定字符串的空检查,以前是

if (empName.equals("") || (empName.equals(null)))

上面的代码有两个问题:

  • 如果empNamenull,则会出现例外情况
  • 调用empName.equals(null)需要返回false,因此无效

检查字符串是null还是空格的正确方法如下:

if (empName==null || empName.trim().isEmpty())

您不需要== true部分,因为isEmpty()会返回boolean

答案 1 :(得分:2)

这里有一些基本的想法很方便。这些是:

  • 指针解除引用

  • 短路评估

指针解除引用。 在Java中,非原始类型称为引用类型。这些类型的变量不包含类型的值,而是包含指向内存的指针。例如:

String str;  

String是引用类型。初始化后,变量str将保存指向已分配的String实例的内存位置的引用或指针。在初始化之前,引用类型的变量具有值null

在可以访问和使用类实例的任何成员(例如,方法或字段)之前,必须访问引用类型的指针以获取成员在内存中的位置。这称为解除引用。如果引用类型变量包含null值,则无法访问任何成员。这就是为什么像这样的表达式是危险的:

`if (myString.equals("")) ...`

如果变量myString包含null或未初始化,则无法将其解除引用到堆位置。在这种情况下,会引发异常并且您的程序失败。

如果您无法保证String变量不会包含null,那么您不应使用上述语句,因为它可能会在您的代码中引发NullPointerException

短路评估。 短路评估是在评估所有部件之前终止多部分表达式的评估的地方 - 因为完成整个评估不会改变表达式的值。这通常适用于布尔表达式。

考虑这样的表达式:

if (myString.trim().isEmpty()) { ... }

如上所述,只要myString包含NullPointerExpressions且无法解除引用,该表达式就会使程序容易受null攻击。不过这个表达是安全的:

if (myString == null || myString.trim().isEmpty) { ... }

在上述情况下,即使myString包含NullPointerException,此表达式也永远不会抛出null。如果myString等于null,则表达式的第一部分为true。在布尔OR表达式true OR xx中,无论xx是什么,表达式的结果始终为true。因此,Java环境只执行第一部分而不是第二部分。这是一件好事,因为如果它已经出现NullPointerException。

短路评估通常用于Java if-then表达式,以测试会在逻辑表达式的后续部分引发异常的空条件。