zoukankan      html  css  js  c++  java
  • Java的String.valueOf 转换 与、空串+类型变量转换与封装类(Integer)的toString方式转换比较。

    1、空串+类型变量方式转换

    int i=20;
    String s=""+i;

    这种方式实际上经过了两个步骤,首先进行了i.ToString()把 i 转换为 字符串,然后再进行加法运算,这里利用了java的toString机制来做转换。

    2、String.valueOf方式转换类型

    int i=20;
    String s=String.valueOf(i);

    查看源码发现,这种方式实际上是使用了封装类(Integer)的toString方式来进行转换的。

    1 public static String valueOf(int i) {
    2    return Integer.toString(i);
    3 }

    3、使用类型封装类的toString()方法

    Integer i=20;
    String s=i.toString();

    查看java源码发现,toString实际上是new 了一个String。

    简单进行速度的测试。

    public class toStringDome {
        public static void main(String[] args)
        {
            Random ra=new Random(new java.util.Date().getTime());
            String tmp=null;
            int runtimes=1000000;
            int range=50;
    
            long startTime=System.currentTimeMillis();   //获取开始时间
            for (int i = 0; i <runtimes; i++) {
                tmp=String.valueOf(ra.nextInt(range));
            }
            long endTime=System.currentTimeMillis(); //获取结束时间
    
            System.out.println("使用String.valueOf程序运行时间: "+(endTime-startTime)+"ms");
    
            long startTimeToString=System.currentTimeMillis();   //获取开始时间
            for (int i = 0; i <runtimes; i++) {
                tmp = ""+ra.nextInt(range);
            }
            long endTimeString=System.currentTimeMillis(); //获取结束时间
            System.out.println("使用(空串来转换+类型变量)程序运行时间: "+(endTimeString-startTimeToString)+"ms");
    
    
            Integer temp=0;
            long startTimeToString1=System.currentTimeMillis();   //获取开始时间
            for (int i = 0; i <runtimes; i++) {
                temp= ra.nextInt(range);
                tmp =temp.toString();
            }
            long endTimeString2=System.currentTimeMillis(); //获取结束时间
    
            System.out.println("使用Integer的toString程序运行时间: "+(endTimeString2-startTimeToString1)+"ms");
    
    
        }
    }

    运行结果:

    使用String.valueOf程序运行时间: 87ms
    使用(空串来转换+类型变量)程序运行时间: 245ms
    使用Integer的toString程序运行时间: 77ms

     

    经过简单测试后发现,使用(空串来转换+类型变量)方式转换比String.valueOf与Integer的toString慢了两倍以上。

    我个人理解使用(空串来转换+类型变量)方式转换效率慢是因为这种方式实际上经过了两个步骤,首先进行了i.ToString()把 i 转换为 字符串,然后再进行字符串加法运算,由于字符串是不可变的,要需要new一个内存空间来存放新的字符串,字符串加法运算影响了效率。

  • 相关阅读:
    【SSH进阶之路】Hibernate映射——一对多关联映射(七)
    深入研究Clang(四) Clang编译器的简单分析
    LLVM每日谈之二十 Everything && Clang driver
    LLVM每日谈之十九 LLVM的第一本系统的书<Getting Started with LLVM Core Libraries>
    session在登录中的使用
    (转)JavaWeb学习总结(十三)——使用Session防止表单重复提交
    网页中自动获取访问用户所在城市的接口插件
    bootstrap新闻模块样式模板
    springmvc的渲染
    springmvc的几点见解
  • 原文地址:https://www.cnblogs.com/softlin/p/Java.html
Copyright © 2011-2022 走看看