前言
我們經常在解決Java的各種奇怪Bug中,遇到一些明明覺得很對,但是又找不出原因的問題。各種Debug,各種排除後,發現問題居然出在了一些平時很難注意到的地方,今天就來總結一下。
1. 變量/字段名有微妙的不同
這個絕對是經常遇見的罪魁禍首,雖然不致命,但是難以排查。主要出現在利用BeanUtil進行對象屬性拷貝的時候,明明覺得字段一毛一樣,但是拷貝完之後,後面的字段總是null。
肉眼是最信不過的,利用查找工具,依次查找(區別大小寫):
- 類型是否一致
- 大小寫是否一致,尤其是駝峯式的首字母
- 是否下劃線一致
- 是否單詞拼寫有誤,比如略寫形式是否一樣,字母l和數字1是否用錯
- 有沒有多空格
2. 分支是否全部覆蓋
有時候,總覺得有些代碼老是走不到,不管怎麼打點,怎麼加日誌,就是沒有信息。
基本上是因爲根本就沒有走到一開始的地方,仔細搜索一下,當前方法是否還有其他分支調用。
3. 是否在一個線程內
尤其利用並行Steam, FeignClient, ExecutorServie等多線程的環境下,變量並不是共享的。
4. 精度是否損失
Double,Float在進行計算時,經常性的與預期的值不相等,這是因爲這兩個類型在計算時,硬件環境不同,計算精度會有所損失,推薦使用BigDecimal進行計算。