Java Eclipse中潜在的空指针访问-看似微不足道的示例
我有这段非常基本的代码,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
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。MakeisNotNull
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);