网站建设教程试题,专业网站建设价格分析,建网站如果不买域名别人能不能访问,谷歌seo的推广首先#xff0c;这个问题就很有意思#xff0c;相信大部分人第一反应不就是null吗#xff1f;
比如#xff1a;
if(str ! null){}可是#xff0c;很多时候我们判断前端送过来的值#xff0c;有可能是空字符串#xff0c;所以更严格的写法是#xff1a;
if(str ! nul…首先这个问题就很有意思相信大部分人第一反应不就是null吗
比如
if(str ! null){}可是很多时候我们判断前端送过来的值有可能是空字符串所以更严格的写法是
if(str ! null !str.equals()){}眼疾手快的同学肯定发现了问题如果str是null怎么办
其实就算是null也没关系因为前面已经判断了不为null是短路与如果前面的条件不是true后面的压根不会执行。
于是这段代码成了很多公司的首选。
有人问为什么要判断是不是空字符串我不判断行不行。
有些情况行但是很多情况就是不可以。
比如你看这里的代码
if(userNo ! null){User user userMapper.selectOne(userNo);log.info(user.userName);
}如果传过来的就是一个空字符串那么是会进入这个逻辑的查出来的user是null在user.userName的时候就会报空指针。
个别头铁的同学又会问那我抛出异常不就行了。
if(userNo ! null userNo.equals()){User user userMapper.selectOne(userNo);if(user null){throw new Exception(用户不存在);}log.info(user.userName);
}乍一看是没问题但是你细品问题就大了。 比如我的业务场景是用户存在就增加积分用户不存在就创建这个用户。
看代码
if(userNo ! null){User user userMapper.selectOne(userNo);if(user null){throw new Exception(用户不存在);}addPoints(user,100);
}else{addUser();
}代码的本意是有userNo我就给他加积分没有userNo就去新增这个用户。
现在你传了一个空字符串过来意思是空却走进了加积分的逻辑。就算报错可真的是客户想要的吗客户是希望我没有用户账号你给我新增一个。
所以这就与业务相悖了。
好了我其实会读心术你此刻也许在想那我随便传一个找不到的userNo给你你不还是走不到addUser的逻辑吗
亲你传个空字符串和null的本意肯定是这个东西我没有。但是你传一个错误的数据那性质就不一样了意思是我有这个东西但是我填错了。那么这样的逻辑自然就没有问题啦。
所以我们要牢记如果业务上这个东西的概念是一个空就一定要既判断null还要判断空字符串双管齐下才能确保万无一失。
当然实际上这么常见的功能我们大可以使用org.apache.commons.lang3.StringUtils的isNotBlank方法
isNotBlank public static boolean isNotBlank(CharSequence cs) {return !isBlank(cs);}isBlank
public static boolean isBlank(CharSequence cs) {int strLen length(cs);if (strLen 0) {return true;} else {for(int i 0; i strLen; i) {if (!Character.isWhitespace(cs.charAt(i))) {return false;}}return true;}}length public static int length(CharSequence cs) {return cs null ? 0 : cs.length();}它不仅帮你判断了null和空字符串,还给你判断了空格简直不要太爽
一个小小的判空却很可能让你吃了大亏如果一个判空没有做好那么里面的逻辑就完全裸露了相信你一定吃过 NullPointerException 的苦头