Oma*_*ani 1 java if-statement conditional-operator
我在某处看到,一旦If语句达到True布尔值,Java就应该"短路".但是,我目前遇到以下代码中的空指针异常(我已经为此问题简化了):
currentFragment.setTag(HOME);
if( !currentFragment.getTag().equals(PROFILE) |
( currentFragment.getArguments() != null &
currentFragment.getArguments().getInt("authorId") != userId) ) { }
Run Code Online (Sandbox Code Playgroud)
Android开发人员会知道setTag()不是一个真正的方法,但在我的实际代码中,我通过错误记录确保了currentFragment.getTag()!= PROFILE.但是,当此代码运行时,它会导致零点异常
currentFragment.getArguments().getInt("authorId") != userId
Run Code Online (Sandbox Code Playgroud)
它应该在|之前的第一个条件下短路 (或)运营商.如果失败了,下一行应该确保getArguments()!= null,那么为什么它会一直到最终条件呢?可以解释这里发生的事情的内部运作.谢谢.
你用的是&代替&&.前者是按位AND,将始终评估双方.后者代表逻辑AND,并将进行短路条件评估.
更多信息:Java教程:运算符
解决当前问题:使用逻辑AND &&而不是按位AND &.类似于你的按位OR |.
if( !currentFragment.getTag().equals(PROFILE) ||
( currentFragment.getArguments() != null &&
currentFragment.getArguments().getInt("authorId") != userId) ) { }
Run Code Online (Sandbox Code Playgroud)