1、工作需求完成后代码优化硬编码时
参考资料:
https://blog.csdn.net/u010560349/article/details/79686206
https://blog.csdn.net/u010560349/article/details/79687729
代码优化前:
if(csAssignPolicyVO.getRoleId() == 100018L){
//.....
}
打算把100018这个roleId全部替换掉
优化后:
if(csAssignPolicyVO.getRoleId() == Long.valueOf(CodeCst.M_QHL_CS_L3)){
//.....
}
当我改完之后就直接提交SVN了,然后再测试的时候就被人吐槽了!
由于vo里面定义的roleId是Long类型,因此当使用 == 比较的时候,优化后的if条件 == 左右两边的对象地址并不相同,所以无论对象的值如何条件都不能通过;而优化前使用 == 的时候,由于是和基础数据类型的100018L作比较,因此vo.getId对象会自动拆箱使用内容与100018L比较,这时候当对象值等于100018的时候,条件可以通过。
正确优化:
if(CodeCst.M_QHL_CS_L3.equal(String.valueOf(csAssignPolicyVO.getRoleId())){
//.....
}
利用String的equal()方法来比较。
2、sql语句日期转化的问题
orcale 日期与字符串相互转化的SQL语句
日期转字符串:
select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;
字符串转日期:
select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;
在有日期格式同时存在月和分钟的时候,分钟写成mi以区分月份MM。
该问题容易出现在一开始只需要显示年月日,后面需求增加时分秒的时候有可能没注意到,一定要小心,出现的话问题不好排查。