前言
我们经常在解决Java的各种奇怪Bug中,遇到一些明明觉得很对,但是又找不出原因的问题。各种Debug,各种排除后,发现问题居然出在了一些平时很难注意到的地方,今天就来总结一下。
1. 变量/字段名有微妙的不同
这个绝对是经常遇见的罪魁祸首,虽然不致命,但是难以排查。主要出现在利用BeanUtil进行对象属性拷贝的时候,明明觉得字段一毛一样,但是拷贝完之后,后面的字段总是null。
肉眼是最信不过的,利用查找工具,依次查找(区别大小写):
- 类型是否一致
- 大小写是否一致,尤其是驼峰式的首字母
- 是否下划线一致
- 是否单词拼写有误,比如略写形式是否一样,字母l和数字1是否用错
- 有没有多空格
2. 分支是否全部覆盖
有时候,总觉得有些代码老是走不到,不管怎么打点,怎么加日志,就是没有信息。
基本上是因为根本就没有走到一开始的地方,仔细搜索一下,当前方法是否还有其他分支调用。
3. 是否在一个线程内
尤其利用并行Steam, FeignClient, ExecutorServie等多线程的环境下,变量并不是共享的。
4. 精度是否损失
Double,Float在进行计算时,经常性的与预期的值不相等,这是因为这两个类型在计算时,硬件环境不同,计算精度会有所损失,推荐使用BigDecimal进行计算。