我在某处读到,一旦 If 语句达到 True boolean 值,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
它应该在 | 之前的第一个条件下短路(或)运算符。如果做不到这一点,下一行应该确保 getArguments() != null,那么为什么它一直到最终条件呢?任何人都可以解释这里发生的事情的内部运作。谢谢。
最佳答案
您正在使用 &
而不是 &&
。前者是按位与运算,总是 计算双方。后者代表逻辑与,将进行短路条件评估。
更多信息:Java Tutorials: Operators
您当前问题的解决方案:使用逻辑与 &&
而不是按位与 &
。与您的按位或 |
类似。
if( !currentFragment.getTag().equals(PROFILE) ||
( currentFragment.getArguments() != null &&
currentFragment.getArguments().getInt("authorId") != userId) ) { }
关于java - Java 是运行每个条件运算符还是在 If 语句中短路?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18576032/