有時在項目開發過程中,對數值的精度要求較高時可能就會用到java.math.BigDecimal,使用時發現有些用法效率較低。
1:初始化一個java.math.BigDecimal時盡量用java.math.BigDecimal.valueOf(0)來替代new java.math.BigDecimal().
2:比較兩個java.math.BigDecimal對象時,最好用equals(),而不要進行數值轉換,如:doubleValue等,測試發現凡涉及到類型轉換,性能都要受到較大影響。
下面是自己寫的一段測試代碼:
import java.math.BigDecimal;
public class TestClass {
? public TestClass() {
? }
? public static void main(String[] args){
??? StringBuffer test = new StringBuffer();
??? BigDecimal tempBig = null;
??? long time1 = System.currentTimeMillis();
??? for(int i=0;i<200000;i++){
????? tempBig = new BigDecimal(0);
????? tempBig = null;
??? }
??? long time2 = System.currentTimeMillis();
??? System.out.println("===="+(time2-time1)+"=======");
??? System.out.println("====@@@@@@@@@@@@@@@@@@@@@=======");
??? long time3 = System.currentTimeMillis();
??? for(int i=0;i<200000;i++){
????? tempBig = BigDecimal.valueOf(0);
????? tempBig = null;
??? }
??? long time4 = System.currentTimeMillis();
??? System.out.println("===="+(time4-time3)+"=======");
??? System.out.println("====@@@@@@@@@@@@@@@@@@@@@=======");
??? tempBig = BigDecimal.valueOf(0);
??? BigDecimal ddd = new BigDecimal(1);
??? long time5 = System.currentTimeMillis();
??? for(int i=0;i<200000;i++){
????? if(tempBig.equals(ddd)){
????? }
??? }
??? long time6 = System.currentTimeMillis();
??? System.out.println("===="+(time6-time5)+"=======");
??? System.out.println("====@@@@@@@@@@@@@@@@@@@@@=======");
??? long time7 = System.currentTimeMillis();
??? for(int i=0;i<200000;i++){
????? if(tempBig.doubleValue()==0){
????? }
??? }
??? long time8 = System.currentTimeMillis();
??? System.out.println("===="+(time8-time7)+"=======");
??? System.out.println("====@@@@@@@@@@@@@@@@@@@@@=======");
? }
}