小验下BigDecimal几种构造方法的效率及其他

主要是想验证下不同的BigDecimal构造器的效率.

java 代码
  1. package my.test.java;   
  2.   
  3. import java.math.BigDecimal;   
  4. /**  
  5.  * 目的:  1.  测试在循环中对Object付值效率;  
  6.  *      2.  BigDecimal的几个构造类型的效率;  
  7.  *      3.  关于new String();  
  8.  * 结论:  1.  在循环外生成一个变量句柄和在循环内生成一个变量的句柄,  
  9.  *      再付值,其效率相当;需要注意的是,在循环内,对象生命周期会随循环的结束而使其不可达  
  10.         而最终被GC回收,而循环外的对象将保留最后一次结果直到方法或类执行完成。  
  11.  *      2.  new BigDecimal(double d)    :50  
  12.  *          new BigDecimal(int d)       :1  
  13.  *          new BigDecimal(String d)    :10  
  14.  *          这三种构造方式new BigDecimal(double d)效率最低,其  
  15.  *      效率比int类型的慢50倍,new BigDecimal(String d)比int类型慢10倍;  
  16.  *      3.  String str = "XXX"比new String("XXX")快上30倍。原因在于String此处有一个  
  17.  *      关于内存的特殊分配方式及取值方式。String str = "XXX"的时候,会先查找内存中是否有相同  
  18.         值"XXX",如果有,则将str指向"XXX",否则才会执行new String("XXX")。  
  19.  * @author mingyong  
  20.  * @date 20070301  
  21.  */  
  22. public class TestObjInLoop {   
  23.   
  24.     private final int count = 10000000;   
  25.     private final String temp = "按时大家发射点发射点法";   
  26.     private final BigDecimal tempBig = new BigDecimal(2.045);   
  27.     /**  
  28.      * @param args  
  29.      */  
  30.     public static void main(String[] args) {   
  31.         // TODO Auto-generated method stub   
  32.         TestObjInLoop TestObjInLoop = new TestObjInLoop();   
  33.         long start = System.currentTimeMillis();   
  34.         /*  
  35.         TestObjInLoop.newObj(2.045);  
  36.         System.out.println("newObj():"+(System.currentTimeMillis()-start));  
  37.         start = System.currentTimeMillis();  
  38.         TestObjInLoop.newObj(2);  
  39.         System.out.println("newObj():"+(System.currentTimeMillis()-start));  
  40.         start = System.currentTimeMillis();  
  41.         TestObjInLoop.newObj("2.0435");  
  42.         System.out.println("newObj():"+(System.currentTimeMillis()-start));  
  43.         */  
  44.         TestObjInLoop.newString();   
  45.         System.out.println("newString():"+(System.currentTimeMillis()-start));   
  46.         start = System.currentTimeMillis();   
  47.         TestObjInLoop.derectString();   
  48.         System.out.println("derectString():"+(System.currentTimeMillis()-start));   
  49.     }   
  50.     private void strIn(){          
  51.         for(int i=0;i
  52.             //String str = this.temp;   
  53.             BigDecimal bg = tempBig;    
  54.         }   
  55.     }   
  56.     private void srtOut(){         
  57.         //String str = "";   
  58.         BigDecimal bg ;   
  59.         for(int i=0;i
  60.             //str = this.temp;   
  61.             bg = this.tempBig;   
  62.         }   
  63.     }   
  64.     private void newObj(double num){   
  65.         for(int i=0;i
  66.             BigDecimal bg = new BigDecimal(num);   
  67.         }   
  68.     }   
  69.     private void newObj(int num){   
  70.         for(int i=0;i
  71.             BigDecimal bg = new BigDecimal(2);   
  72.         }   
  73.     }   
  74.     private void newObj(String num){   
  75.         for(int i=0;i
  76.             BigDecimal bg = new BigDecimal(num);   
  77.         }   
  78.     }   
  79.        
  80.     private void newString(){   
  81.         for(int i=0;i
  82.             String bg = new String("士大夫ddddd大师傅");   
  83.         }   
  84.     }   
  85.     private void derectString(){   
  86.         for(int i=0;i
  87.             String bg = "士大夫ddddd大师傅";   
  88.         }   
  89.     }   
  90. }   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值