Integer x=500; 1和2 哪个效率高? 另外,问一个从1累加到n的操作。最高效的方法是什么? 多谢多谢 |
|
20分 |
2 效率高。
至于累加,难道不该用等差数列的计算公式吗?? |
能说一下为什么么?
|
|
20分 |
对不起,纠正一下。
1 快。 如果””+500两边都是常量,会被直接编译成“500”这个静态的字符串。 但是,如果加号两边任何一个是动态值(比如函数调用)的话,那么使用+拼接,会导致StringBuilder的隐式参与 最终执行的代码是 String str = new StringBuilder(左边).append(右边).toString(); |
非常感谢你的回答和解释。第二个说的很有道理。多谢提点。大概是我太拘泥于java语言的算法。而忽视了数学上的算法。
|
|
自己试了下,确实直接””+500会快些,换成””+x就会慢不少。而String.valueOf(x)稍慢于””+500,可能是因为valueOf里有个问号表达式的原因吧。 public static void main(String[] args) { Integer x = 500; long curMillis = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { String str = String.valueOf(x); } System.out.println("耗时:" + (System.currentTimeMillis() - curMillis)); curMillis = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { String str = "" + 500; } System.out.println("耗时:" + (System.currentTimeMillis() - curMillis)); curMillis = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { String str = "" + x; } System.out.println("耗时:" + (System.currentTimeMillis() - curMillis)); } |