第一种方式:加一个空字符串
1233434+""
第二种方式:String类的方法
String.valueOf(456231)希望得到比较深的回答

解决方案 »

  1.   

    public class Test1 { /**
     * @param args
     */
    public static void main(String[] args) {
    long start = System.currentTimeMillis();
    for (int i = 0; i < 1000000; i++) {
    String aa = i + "";
    }
    System.out.println( System.currentTimeMillis() - start);
    long start1 = System.currentTimeMillis();
    for (int i = 0; i < 1000000; i++) {
    String aa = String.valueOf(i);
    }
    System.out.print( System.currentTimeMillis() - start1);
    }
    }结果
    ----------------------------------------------------------------------------------
    188
    78
      

  2.   

    java操作耗时对照表
    操作 代码 耗时(单位时间)
    本地赋值 i=n;  1.0
    实例赋值 this.i=n;  1.2
    int增值 i++; 1.5
    byte增值 b++;  2.0
    short增值 s++; 2.0
    float增值 f++;  2.0
    double增值 d++; 2.0
    空循环 while(true) n++;  2.0
    三元表达式 (x<0) ?-x : x  2.2
    算术调用 Math.abs(x); 2.5
    数组赋值 a[0] = n; 2.7
    long增值 l++;  3.5
    方法调用 funct(); 5.9
    throw或catch异常 try{ throw e; }或catch(e){}  320
    同步方法调用 synchMehod(); 570
    新建对象 new Object();  980
    新建数组 new int[10];  3100-------------------------------------------------
    结论 1231231 + "" 创建了多个对象 ,造成了速度降低
      

  3.   


    +1
    字符串相加很低效,如果次数不多无所谓,大量相加的话,还是用StringBuilder的append
    LZ如果只想转为字符串,还是用String.valueOf好
      

  4.   

    数据量小的时候没区别,数据量大的时候两个都不是好方法
    String是final类,不可继承不可改变,在拼接的时候要转换成StringBuffer,再调用append,拼接完成后调用toString方法再转成String.
    所以用加号和String.valueOf都不是好方法.
    效率比较高的是StringBuffer和StringBuilder.推荐StringBuilder,这个类内部封装了StringBuffer,效率更高.你可以去JE找找,我记得以前有一个帖子专门测试这String,StringBuffer,StringBuilder三个拼接字符串的性能.
      

  5.   


    public static void main(String[] args) throws Exception {
    new Thread() {
    public void run() {
    int i = 1000;
    long s = System.currentTimeMillis();
    for (int j = 0; j < 1000000; j++) {
    String k = i + "";
    }
    System.out.println("字符串相加用了:" + (System.currentTimeMillis() - s) + "ms");
    };
    }.start(); new Thread() {
    public void run() {
    int i = 1000;
    long s1 = System.currentTimeMillis();
    for (int j = 0; j < 1000000; j++) {
    String k = String.valueOf(i);
    }
    System.out.println("valueOf用了:" + (System.currentTimeMillis() - s1) + "ms");
    };
    }.start();
    }valueOf用了:63ms
    字符串相加用了:141ms
      

  6.   


    public class StrTest{
    public void f1(){
        String str = 1233434+"";
    }
    public void f2(){
    String str =String.valueOf(456231);
    }
    public static void main(String args[]){
    }
    }
    字节码:
    public void f1();
      Code:
       Stack=1, Locals=2, Args_size=1
       0: ldc #2; //String 1233434<----编译器在这里已经进行优化了,根本就不存在什么StringBuffer又StringBuilder之类的拼接,
       2: astore_1
       3: return
      LineNumberTable: 
       line 3: 0
       line 4: 3
    public void f2();
      Code:
       Stack=1, Locals=2, Args_size=1
       0: ldc #3; //int 456231
       2: invokestatic #4; //Method java/lang/String.valueOf:(I)Ljava/lang/String;<-----这里还需要进行方法调用,谁的效率高难道还看不出来吗?
       5: astore_1
       6: return
      LineNumberTable: 
       line 6: 0
       line 7: 6
      

  7.   

    这个问题要两说:1)对于数字常量
    1233434+""比String.valueOf(1233434)效率要高
    因为整数是常量,1233434+""也是个字符串常量,编译器已经优化了,而valueOf()要临时调用没法优化2)对于数字变量
    int x;
    x+"" 没有 String.valueOf(x)高
    因为前者要创建3个字符串对象x,"",x+"",后者只需要创建1个对象
      

  8.   

    String.valueOf,使用静态方法,速度快
    1233434+"",实际上是通过建立stringbuilder来实现的,可以反汇编。javap查看。
      

  9.   

    使用 String.valueOf(int) 不如直接使用 Integer.toString(int).