关于字符串的+操作,单纯的String s ="" +11;编译器会看做常量""和常量11的拼接操作,常量计算最快;String.valueOf会调用方法,速度上会稍慢于常量+操作;另外,如果是这样:String str = "";String s = str+11;就不是常量+操作了,会通过SringBuilder(JDK1.6还是1.5版本开始用StringBuilder替换StringBuffer来实现字符串+)的append操作来拼接。耗时上看,常量+操作 最快,String.valueOf次之,字符串对象+操作最慢。可以通过javap -c 看看具体操作步骤,也可以通过测试代码直观比较耗时:
public static void main(String[] args) { long t = System.currentTimeMillis(); for (int i = 0; i < 1000000; i++) { String s0 = String.valueOf(11); } System.out.println("耗时" + (System.currentTimeMillis() - t)); t = System.currentTimeMillis(); for (int i = 0; i < 1000000; i++) { String s = "" + 11; } System.out.println("耗时" + (System.currentTimeMillis() - t)); String str = ""; t = System.currentTimeMillis(); for (int i = 0; i < 1000000; i++) { String s = str + 11; } System.out.println("耗时" + (System.currentTimeMillis() - t)); }
测试结果