1、比較兩個浮點型是否相等,包括float及double,不要採用等號"=="進行比較,因為浮點計算可能涉及到舍入計算。如果是需要值比較準確的比較,如貨幣金額等,可以考慮使用固定精度的類型,如BigDecimal的。對於不需要精確的值,考慮比較平等一些範圍內,例如:如果(Math.abs(x - y的)<.0000001)。如:
if(x==y){}
可以修改為
if(Math.abs(x - y)<.0000001){}
2、多線程並發應用中日期的格式化,要注意SimpleDateFormat不是安全執行緒的。
SimpleDateFormat為了保證效率,內部採用了類成員變數來記錄值,所以不是安全執行緒的,我們的應用程式中盡量不要將SimpleDateFormat作為類成員變數,否則會存線上程安全的問題,解決的方法有如下幾種:
1)、將SimpleDateFormat作為方法變數,直接定義在方法內部,雖然存在著記憶體回收的問題,但是解決了安全執行緒的問題;
2)、使用Apache的commons-lang中的FastDateFormat,這是一個安全執行緒的,不過它只提供了format日期的方法,卻沒有提供將字串轉換為日期的方法,這是一個不足;
3)、如果你確實對SimpleDateFormat情有獨鐘,那麼可以使用ThreadLocal來封裝當前它,也可以保證是安全執行緒的,如:
ThreadLocal<SimpleDateFormat> df = new ThreadLocal<SimpleDateFormat>() {public SimpleDateFormat get() {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");return sdf;}};public Date dateFormat(String dateString) throws ParseException{return df.get().parse(dateString);}
3、Cache中盡量不要嘗試通過Throwable去捕獲所有的異常
從它的JavaDoc可以看到,Throwable是JAVA虛擬機器可以拋出的所有類的超類,其中包括了Error及Exception等,Error是不可以恢複錯誤,Exception是可以的。
4、字串的拼接,盡量不要採用符合“+”
在小型的應用,特別是用戶端應用中,這是個沒有多大的區別的,但如果你有大型互連網應用開發的經驗,在高並發的壓力下,過多的使用“+”拼接字串,可能會對你的應用產生不小的影響,甚至最嚴重的情況下是讓伺服器響應不過來。所以有字串拼接的情況了,最好是使用StringBuffer,在單線程的情況下,可以使用StringBuilder擷取得更好的效能。這篇部落格,是一位博主做的字串拼接的效能表現:http://blog.csdn.net/yirentianran/article/details/2871417,可以看一下。