编码避坑指南(孤尽4班)
浮点数据的处理
浮点数据避坑
-
浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能用equals 来判断
-
BigDecimal的等值比较应使用compareTo()方法,而不是equals()方法
-
equals():方法会比较值和精度(1.0与1.00返回结果为false)
-
compareTo():会忽略精度。
-
禁止使用构造方法 BigDecimal(double)的方式把 double值转化为BigDecimal对象
日期数据的处理
日期格式化需要注意的问题
日期格式化时,传入pattern中表示年份统一使用小写的y
小写yyyy:表示当天所在的年
大写YYY:代表是week in which year (JDK7之后引入的概念)
意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,返回的YYYY就是下一年。
在日期格式中分清楚大写的M和小写的m,大写的H和小写的h分别指代的意义
- 表示月份是大写的M;
- 表示分钟则是小写的m;
- 24小时制的是大写的H;
- 12小时制的则是小写的h。
获取当前毫秒数:
- System.currentTimeMillis();而不是new Date().getTime()
- 如果想获取更加精确的纳秒级时间值,使用System.nanoTime的方式
- 在JDK8中,针对统计时间等场景,推荐使用Instant类
控制语句的避坑规范
- 每个case要么通过continue/break/return等来终止。
- 要么注释说明程序将继续执行到哪一个case为止
- 在一个switch块内,都必须包含一个default语句并且放在最后
控制语句好习惯
不要在其它表达式(尤其是条件表达式)中,插入赋值语句
不要在条件判断中执行其它复杂的语句,以提高可读性
避免采用取反逻辑运算符
必须取反逻辑运算
在高并发场景中控制语句规约
在高并发场景中,避免使用”等于”判断作为中断或退出的条件
如果并发控制没有处理好,容易产生等值判断被“击穿”的情况,使用大于或小于的区间判断条件来代替
需要参数校验的场合
- 调用频次低的方法。
- 执行时间开销很大的方法。此情形中,参数校验时间几乎可以忽略不计,但如果因为参数错误导致中间执行回退,或者错误,那得不偿失。
- 需要极高稳定性和可用性的方法。
- 对外提供的开放接口,不管是RPC/API/HTTP接口。
- 敏感权限入口。
- 公开接口需要进行入参保护,尤其是批量操作的接口。