`
bilo
  • 浏览: 18035 次
  • 性别: Icon_minigender_1
  • 来自: 江湖
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

    博客分类:
  • Java
阅读更多

主要是想验证下不同的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. }   
分享到:
评论

相关推荐

    关于Biginteger的分数类期末课程设计

    6. **其他辅助方法**:可能还需要实现`equals`和`hashCode`方法,以及将分数转换为BigDecimal(如果需要进行浮点运算)或其他类型的辅助方法。 在进行期末课程设计时,你可能会遇到性能优化的问题,因为BigInteger...

    Java经典面试题+答案(带书签)pdf

    Java异常几种处理方式** - **捕获异常**:使用`try-catch`结构。 - **声明异常**:使用`throws`关键字声明。 - **抛出异常**:使用`throw`关键字。 **5. 什么时候会用到自定义异常?** - 当需要更精确地控制异常...

    java学习笔记

    - **this关键字**:用于引用当前对象,解决局部变量与成员变量同名的问题,或者调用本类中的其他构造方法。 - **System.gc()**:用于请求JVM执行垃圾回收,但不保证立即执行。 - **包(Package)**:用于组织Java类...

    2014年Java最全面试题以及答案.

    7. 排序都有哪几种方法?请列举。用JAVA实现一个快速排序? 常见的排序算法有冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。快速排序是通过选择一个“基准”元素,然后将数组分为两个子数组,一个...

    阿里开发手册

    在判断两个BigDecimal对象是否相等时,禁止使用equals()方法,这是因为在Java中,equals()方法会被BigDecimal内部的scale(小数点后位数)所影响。例如,两个BigDecimal数值1和1.00在equals()方法眼中可能不是相等的...

    test-decimal:Mod的测试任务

    `BigDecimal`是Java语言中用于处理高精度浮点数的类,它提供了一种精确的数学计算方式,避免了浮点数运算时可能出现的精度问题。下面将详细介绍`BigDecimal`以及与其相关的测试知识点。 `BigDecimal`是Java `java....

    李兴华java1.8视频笔记

    在Java中,实现多线程有几种方式: 1. 继承Thread类:创建一个新的类继承Thread类,并重写run()方法,然后创建该类的对象并调用start()方法来启动线程。 2. 实现Runnable接口:创建一个新的类实现Runnable接口,并...

    openjdk-18(openjdk-18+36_windows-x64_bin.zip)

    记录类是一种特殊的类,它简化了数据载体的表示,自动提供了构造函数、equals()、hashCode()和toString()方法。 4. **Foreign-Memory Access API**(外部内存访问API):允许Java程序直接与非Java内存交互,如操作...

    Java基础课程培训PPT教案学习.pptx

    1. **Java数据类型**:数据类型是编程语言中的一种基本构造,它定义了变量可以存储的数据种类。Java的数据类型分为两类:简单数据类型和复合数据类型。简单数据类型包括布尔型(boolean)、字符型(char)、整数型...

    动力节点老杜Java基础入门学习教程分享——常用类

    - **StringBuilder**:与 `StringBuffer` 类似,但方法是非同步的,适用于单线程环境,效率更高。 #### 基本类型对应的包装类 - **概述**:基本类型的包装类提供了一些额外的功能,如转换、格式化等。所有包装类都...

    Java核心技术编程第8版(英文版)

    - **定义自己的类**:指导读者如何创建自己的类,并强调了构造函数、成员变量和方法的重要性。 - **静态字段与方法**:解释了静态字段和静态方法的用途和区别。 - **方法参数**:讨论了如何传递参数到方法中,包括按...

Global site tag (gtag.js) - Google Analytics