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