• 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一个内存空间来存放新的字符串,字符串加法运算影响了效率。

  • 相关阅读:
    JAVAEE学习day01
    learn MongoDB (二) 常用修改器
    learn MongoDB (一) 常用命令行操作
    js事件冒泡和捕获
    vim 常用设置
    void 0 等于 undefined 为什么不直接用undefined
    原生js操作class
    WAI-ARIA roles
    css 效果收集
    前端文章收集
  • 原文地址:https://www.cnblogs.com/softlin/p/Java.html
Copyright © 2020-2023  润新知