我有BookFragment:
public class BooksFragment extends Fragment {
private final String ALL_PUBLISHERS = "Wszystkie Wydawnictwa";
以及稍后在private void方法中我正在访问ALL_PUBLISHERS字段,如下所示:
if(chosenPublisher != null && chosenPublisher.equals(ALL_PUBLISHERS))
doStuff();
现在代码似乎没有任何问题,我个人从来没有遇到过这方面的麻烦但是感谢Google Play Developer Console我注意到一些用户在访问ALL_PUBLISHERS字段时遇到了NullPointerException。
现在:
我的感受是什么?
答案 0 :(得分:2)
我认为你是以错误的方式解释堆栈跟踪;日志声明以下提示
尝试调用虚方法' boolean java.lang.String.equals(java.lang.Object中)'在空对象引用上
在左侧变量chosenPublisher
上调用该方法。如果您在代码中以某种并发方式修改chosenPublisher
变量,则在某些交错中可能会发生NPE异常,因为 if statament不是原子的。
另一方面,静态字段ALL_PUBLISHERS
在类加载时初始化:如果您没有修改它,则它不能为空。
总之,我的建议是在条件语句中使用ALL_PUBLISHERS
变量作为左侧元素:
if(chosenPublisher != null && ALL_PUBLISHERS.equals(chosenPublisher))
doStuff();