我在某处读到,一旦 If 语句达到 True 布尔值,Java 就应该“短路”。但是,我目前在以下代码中遇到空指针异常(出于此问题的目的,我已对其进行了简化):
currentFragment.setTag(HOME);
if( !currentFragment.getTag().equals(PROFILE) |
( currentFragment.getArguments() != null &
currentFragment.getArguments().getInt("authorId") != userId) ) { }
Android 开发人员会知道 setTag() 不是真正的方法,但在我的实际代码中,我通过错误日志记录确保 currentFragment.getTag() != PROFILE。但是,当此代码运行时,它会导致空点异常
currentFragment.getArguments().getInt("authorId") != userId
它应该在 | 之前的第一个条件下短路。(OR) 运算符。如果做不到这一点,下一行应该确保 getArguments() != null,那么为什么它会一直到最终条件呢?任何人都可以解释这里发生的事情的内部运作。谢谢。