Java Eclipse中潜在的空指针访问-看似微不足道的示例

Java Eclipse中潜在的空指针访问-看似微不足道的示例,java,eclipse,pointers,null,Java,Eclipse,Pointers,Null,我有这段非常基本的代码,Eclipse给了我“潜在的空指针访问”警告/错误 public class PotentialNull { public void test(final String nullableString) { boolean isNotNull = nullableString != null; if (nullableString != null) { // No problem Sy

我有这段非常基本的代码,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
不能为null。然而,在第二种情况下,情况并非如此,我真的不会认为这太难弄清楚

有人能确认这不是我的系统/设置特有的吗

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


似乎解决了一个更复杂的问题,所以我希望我再问一次也没问题。

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

boolean isNotNull = nullableString != null;


EclipseBug中描述了这一点,其中一个重复项关闭后无法修复


这个bug基本上是说Eclipse不跟踪变量
isNotNull
nullableString
之间的相关性,因此它不知道该值不能为null。

Make
isNotNull
final
。我怀疑它认为,
isNotNull
可以在声明和使用之间更改……尽管它是本地的,没有代码更改它,Eclipse应该足够聪明,知道它没有改变……如果将
nullableString
设置为非最终值,那么第一种情况仍然有效吗?我投票将这个问题作为非主题来结束,因为它基本上是一个Eclipse错误报告,而不是一个可回答的SO问题。如果用它的定义替换isNotNull,会发生什么(nullableString!=null)?据我所知,它没有改变任何东西。你认为它为什么有效?谢谢Isaac,但这似乎不是Java代码。即使我做了
boolean isNotNull=nullableString!=null?true:false
,它没有改变任何东西。至少我现在知道它实际上是一个bug,我没有忽略一些基本的东西。谢谢你的帮助e澄清!
boolean isNotNull = (if(nullableString != null)?True:False);