有时在项目开发过程中,对数值的精度要求较高时可能就会用到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("====@@@@@@@@@@@@@@@@@@@@@=======");
}
}