4

这可能是一个重复的问题。我将一个String变量初始化为null。我可能会也可能不会用一个值更新它。现在我想检查这个变量是否不等于null,无论我尝试什么我都会得到一个空指针异常。我不能抛出空指针异常,因为它很昂贵。是否有任何有效的解决方法。TIA

4

5 回答 5

3

如果你使用

if (x == null)

不会得到一个NullPointerException.

我怀疑你在做:

if (x.y == null)

这是抛出,因为x它是空的,而不是因为x.y它是空的。

如果这不能解释,请发布您用于测试无效性的代码。

于 2009-08-14T12:55:10.300 回答
3

我猜你正在做这样的事情,

  String s = null;

  if (s.equals(null))

您可以像这样检查 null

  if (s == null)

更好的方法是忽略 null 并像这样检查预期值,

  if ("Expected value".equals(s))

在这种情况下,当 s 为空时,结果始终为假。

于 2009-08-14T13:01:16.177 回答
1

字符串是不可变的

@Test(expected = NullPointerException.class)
public void testStringEqualsNull() {
    String s = null;
    s.equals(null);
}

@Test
public void testStringEqualsNull2() {
    String s = null;
    TestCase.assertTrue(s == null);
}
于 2009-08-14T12:56:29.487 回答
1

我只比较 s==null

你能显示你写的代码片段吗 s==null 永远不会抛出 NPE

于 2009-08-14T13:21:52.423 回答
0

如果您正在检查“s”是否为空,则不要在“s”之后应用点(。)。这样做会抛出 NullPOinterException,因为应用 dot(.) 意味着您正在尝试访问一个目前基本上为空的指针位置!

还尝试使用检查字符串是否为空或空的库函数。您可以使用 apache 库中的 StringUtils.isEmpty(s) 来检查两者

于 2018-07-01T08:25:40.880 回答