JAVA中int转String类型效率比较
大家都知道JAVA中 int 类型要转化成 String 类型,可以有三种方式,分别是:
* (1) String.valueOf(i)
* (2) Integer.toString(i)
* (3) i+""
因为前两天,写一个程序时,要用到 int 转 String ,并且数据量很大,因此想看看这三种方式的效率怎样,写了一下简单的测试程序,在此记录一下。

- public?class?TestIntToStr?{ ?? ? ?? ?public?static?void?main(String[]?args)?{ ?? ??int[]?intArr?=?new?int[1000000]; ?? ??String[]?strArr1?=?new?String[1000000];//为了公平分别定义三个数组 ?? ?? ??String[]?strArr2?=?new?String[1000000]; ?? ??String[]?strArr3?=?new?String[1000000]; ?? ??//赋值 ?? ??Long?t1?=?System.currentTimeMillis(); ?? ??for(int?i=0;i<1000000;i++){ ?? ???intArr[i]=i+1; ?? ??} ?? ??Long?t2?=?System.currentTimeMillis(); ?? ??for(int?i=0;i<1000000;i++){ ?? ????strArr1[i]?=?String.valueOf(intArr[i]);?? ?? ??} ?? ??Long?t3?=?System.currentTimeMillis(); ?? ??for(int?i=0;i<1000000;i++){ ?? ???strArr2[i]?=?Integer.toString(intArr[i]); ?? ??} ?? ??Long?t4?=?System.currentTimeMillis(); ?? ??for(int?i=0;i<1000000;i++){ ?? ???strArr3[i]?=?intArr[i]+""; ?? ??} ?? ??Long?t5?=?System.currentTimeMillis(); ?? ??System.out.println("t1?=?"+t1); ?? ??System.out.println("t2?=?"+t2); ?? ??System.out.println("t3?=?"+t3); ?? ??System.out.println("t4?=?"+t4); ?? ??System.out.println("t5?=?"+t5); ?? ??System.out.println("赋值:"+(t2-t1)); ?? ??System.out.println("String.valueOf(i):"+(t3-t2)); ?? ??System.out.println("Integer.toString(i):"+(t4-t3)); ?? ??System.out.println("i+\"\":"+(t5-t4)); ?? ?? ?} ?? ?? }??
public class TestIntToStr { public static void main(String[] args) { int[] intArr = new int[1000000]; String[] strArr1 = new String[1000000];//为了公平分别定义三个数组 String[] strArr2 = new String[1000000]; String[] strArr3 = new String[1000000]; //赋值 Long t1 = System.currentTimeMillis(); for(int i=0;i<1000000;i++){ intArr[i]=i+1; } Long t2 = System.currentTimeMillis(); for(int i=0;i<1000000;i++){ strArr1[i] = String.valueOf(intArr[i]); } Long t3 = System.currentTimeMillis(); for(int i=0;i<1000000;i++){ strArr2[i] = Integer.toString(intArr[i]); } Long t4 = System.currentTimeMillis(); for(int i=0;i<1000000;i++){ strArr3[i] = intArr[i]+""; } Long t5 = System.currentTimeMillis(); System.out.println("t1 = "+t1); System.out.println("t2 = "+t2); System.out.println("t3 = "+t3); System.out.println("t4 = "+t4); System.out.println("t5 = "+t5); System.out.println("赋值:"+(t2-t1)); System.out.println("String.valueOf(i):"+(t3-t2)); System.out.println("Integer.toString(i):"+(t4-t3)); System.out.println("i+\"\":"+(t5-t4)); } }
在JDK1.5环境下测试多次:
发现:
赋值:0
String.valueOf(i):891
Integer.toString(i):468
i+"":844
String.valueOf(i)与i+""的时间差别不大。
而Integer.toString(i)时间只有它们的一半左右,即此方法效率比较高。
Integer类:
public static String toString(int i, int radix) { ……/* Use the faster version */if (radix == 10) { return [color=red]toString(i)[/color];}……return new String(buf, charPos, (33 - charPos)); } public static String toString(int i) { if (i == Integer.MIN_VALUE) return "-2147483648"; int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i); char[] buf = new char[size]; getChars(i, size, buf); return new String(0, size, buf); }所以Integer.toString(i)方法的效率比较高。但i+""内部的处理机制是怎样的呢?public static String valueOf(int i) { return Integer.toString(i, 10); }
Integer类:
public static String toString(int i, int radix) { ……/* Use the faster version */if (radix == 10) { return toString(i);}……return new String(buf, charPos, (33 - charPos)); } public static String toString(int i) { if (i == Integer.MIN_VALUE) return "-2147483648"; int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i); char[] buf = new char[size]; getChars(i, size, buf); return new String(0, size, buf); }所以Integer.toString(i)方法的效率比较高。但i+""内部的处理机制是怎样的呢?
i+""应该是使用了StringBuffer的append(), 结束的时候调用了toString()这个方法