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

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×