解决方案 »

  1.   

    2 效率高。至于累加,难道不该用等差数列的计算公式吗??
    (1 + n)× n / 2
    如果n很大会导致越界,考虑BigInteger
      

  2.   

    对不起,纠正一下。
    1 快。
    如果""+500两边都是常量,会被直接编译成“500”这个静态的字符串。
    但是,如果加号两边任何一个是动态值(比如函数调用)的话,那么使用+拼接,会导致StringBuilder的隐式参与
    最终执行的代码是
    String str = new StringBuilder(左边).append(右边).toString();
      

  3.   

    非常感谢你的回答和解释。第二个说的很有道理。多谢提点。大概是我太拘泥于java语言的算法。而忽视了数学上的算法。
      

  4.   


    自己试了下,确实直接""+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));
        }