有時(shí)在項(xiàng)目開(kāi)發(fā)過(guò)程中,對(duì)數(shù)值的精度要求較高時(shí)可能就會(huì)用到j(luò)ava.math.BigDecimal,使用時(shí)發(fā)現(xiàn)有些用法效率較低。
1:初始化一個(gè)java.math.BigDecimal時(shí)盡量用java.math.BigDecimal.valueOf(0)來(lái)替代new java.math.BigDecimal().
2:比較兩個(gè)java.math.BigDecimal對(duì)象時(shí),最好用equals(),而不要進(jìn)行數(shù)值轉(zhuǎn)換,如:doubleValue等,測(cè)試發(fā)現(xiàn)凡涉及到類(lèi)型轉(zhuǎn)換,性能都要受到較大影響。
下面是自己寫(xiě)的一段測(cè)試代碼:
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("====@@@@@@@@@@@@@@@@@@@@@=======");
? }
}