java关于 || 和 && 的一个代码(规范)问题

瑞hong不还钱
  • 31
public class School{
    public int student(Object age){
        if(age != 0 || age != null){
            ……
        }
    }
}

假如 if(age != 0 || age != null) 这个写法没问题,或者说age是一个可以同时拿来判断0和null的数据类型。

1、请问 是先判断 age != null,还是先判断 age != 0 好些?为什么?
2、基于第一个问题,如果 || 换成 &&,先判断哪个好点?为什么?

请大神指教,谢谢。

回复
阅读 710
5 个回答
✓ 已被采纳
假如 if(age != 0 || age != null) 这个写法没问题,或者说age是一个可以同时拿来判断0和null的数据类型。

那不就是 Integer 或者 Long

1、请问 是先判断 age != null,还是先判断 age != 0 好些?为什么?

必然是先 != null 然后 != 0,因为判断!= 0 是把包装类拆成基本类型做判断,如果是null 的话会空指针

2、基于第一个问题,如果 || 换成 &&,先判断哪个好点?为什么?

同上,包装类判断内容,必须先!= null

针对1,2两点,个人觉得先做非空判断。这样可以避免很多运行时的空指针异常NullPointerException

首先该题 age != null || age != 0; 当age可能为null时,使用||肯定是会null异常的; 只有使用 age != null && age != 0; 才有一定的意义;

如果考虑的是两个都有意义不会引起奔溃的值时;

  1. x != a || x != b; 不管如何 x不可能同时等于a和b(ab不相等); 所以这个if里面的语句一定会走;那考虑的就是【尽可能的用一个判断就结束】; 这时第一个表达式应是 a/b 中概率较小的在前;
  2. x != a && x != b; 这时候虽然存在有些值会走if里面的, 但是哪些值会走if是确定的,无法优化; 同样的优化思路 【尽可能的用一个判断就结束】; 这时第一个表达式应是 a/b 中概率较大的在前;

其实只要不是调用age的属性,哪个都一样

Elixin
  • 3
新手上路,请多包涵

从个人书写习惯来讲,我不愿意把判空和逻辑放在一起,如果是业务需要那么先判空再逻辑判断.能够避免空指针异常的问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏