【问题标题】:Potential null pointer access in Eclipse - seemingly trivial exampleEclipse 中潜在的空指针访问 - 看似微不足道的示例
【发布时间】:2016-10-25 08:50:15
【问题描述】:

我有这段非常基本的代码,Eclipse 给了我“潜在的空指针访问”警告/错误。

public class PotentialNull {
    public void test(final String nullableString) {
        boolean isNotNull = nullableString != null;

        if (nullableString != null) {
            // No problem
            System.out.print(nullableString.hashCode());
        }

        if (isNotNull) {
            // Potential null pointer access: The variable nullable may be null at this location
            System.out.print(nullableString.hashCode());
        }
    }
}

正如您在示例中看到的,编译器知道在第一个 if 语句中,nullableString 不能为空。然而,在第二次它没有,我真的不会认为这太难弄清楚了。

有人可以确认这不是特定于我的系统/设置吗?

我知道,我可以抑制警告等,但我真的想知道这是否可能是一个错误。还是我忽略了什么?

Another question about this 似乎解决了一个更复杂的情况,所以我希望没关系,我再次询问。

【问题讨论】:

  • 制作isNotNull final。我怀疑它认为isNotNull 可以在声明和使用之间更改。
  • ...虽然它是本地的并且没有代码更改它,但 Eclipse 应该足够聪明,知道它没有更改...
  • 如果您将nullableString 设为非最终结果,第一种情况是否仍然有效?
  • 我投票结束这个问题作为离题,因为它基本上是一个 Eclipse 错误报告,而不是一个可回答的 SO 问题。
  • 如果将 isNotNull 替换为其定义 (nullableString != null) 会发生什么?

标签: java eclipse pointers null


【解决方案1】:

这在 Eclipse 错误 260293 中有所描述,这是因无法修复而关闭的几个重复项之一。

这个bug基本上说Eclipse不跟踪变量isNotNullnullableString之间的相关性所以它不知道这个值不能为null。

【讨论】:

  • 至少我现在知道它实际上是一个错误并且我没有忽略一些基本的东西。谢谢你的澄清!
【解决方案2】:

在分配布尔变量 isNotNull 时使用条件运算符。 换行

boolean isNotNull = nullableString != null;

boolean isNotNull = (if(nullableString != null)?True:False);

【讨论】:

  • 据我所知,它不会改变任何东西。为什么你认为它有效?
  • 感谢 Isaac,但这似乎不是 Java 代码。即使我这样做boolean isNotNull = nullableString != null ? true : false,也不会改变任何事情。
猜你喜欢
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多