在业务需求中,我们经常会判断是否为null而去做一些业务处理,用到了equals方法,但是你想想之前真的没有用错吗?
话不多说,这个经常用,直接上代码
package com.example; import lombok.extern.slf4j.Slf4j; /** * @author XuYangWei * @Date 2021/1/23 9:06 */ @Slf4j public class TestEquals { public static void main(String[] args) { log.info("我是叫null的小伙子,让我来~"); toTestEquals(null); } public static void toTestEquals(String s) { String y = "y"; if (y.equals(s)) { log.info("打印不出我,实际业务中equals相等后再我这里做业务代码哦,嘿嘿~~~"); } try { if (s.equals(y)) { log.info("看异常日志,不用看我,哼~"); } } catch (Exception e) { log.info("住手,这里不可以!"); log.info("我是空指针异常"); } } }
这里传递一个不为空的字符串s和为空的变量y是null作比较,前面的判断我们先把参数s放前面,后面的判断我们把y放前面。
我们看看测试结果:
同时是两者作比较,前面的方法不会出现空指针异常,跳出if;后面的方法在作比较的时候会直接在if判断的时候出现空指针异常,被捕捉到异常日志输出。
根据打印我们就能看出结果,这种问题新手很容易忽略,以为确定不为null的定值和可能为null的变量比较不管谁在前谁在后都一个样。
不为null的定值和可能为null的变量比较,一定要定值在前面,变量在后面。