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

  • 相关阅读:
    JfreeChart折线图 CSDN-李鹏飞
    [2012山东省第三届ACM大学生程序设计竞赛]——Mine Number
    两个对象值同样(x.equals(y) == true),但却可有不同的hash code,这句话对不正确?
    EBS TimeZone问题
    json数据转化成实体 存到数据库.
    写给大一大二大三还在迷惘中的学生
    Xamarin中Unsupported major.minor version 52.0问题解决
    解决Xamarin Android SDK Manager闪退问题
    Xamarin Forms启动自带模拟器缓慢
    Xamarin Android SDK无法更新的解决办法
  • 原文地址:https://www.cnblogs.com/softlin/p/Java.html
Copyright © 2011-2022 走看看