求教一个运行效率问题

J2EE 码拜 10年前 (2015-04-22) 1239次浏览 0个评论

Integer x=500;
1.String str=””+500;
2.String str=String.ValueOf(x)

1和2 哪个效率高?

另外,问一个从1累加到n的操作。最高效的方法是什么?

多谢多谢

求教一个运行效率问题
20分
2 效率高。

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

求教一个运行效率问题
能说一下为什么么?
求教一个运行效率问题
20分
对不起,纠正一下。
1 快。
如果””+500两边都是常量,会被直接编译成“500”这个静态的字符串。
但是,如果加号两边任何一个是动态值(比如函数调用)的话,那么使用+拼接,会导致StringBuilder的隐式参与
最终执行的代码是
String str = new StringBuilder(左边).append(右边).toString();
求教一个运行效率问题
非常感谢你的回答和解释。第二个说的很有道理。多谢提点。大概是我太拘泥于java语言的算法。而忽视了数学上的算法。
求教一个运行效率问题
引用 2 楼 andymu077 的回复:

能说一下为什么么?

引用 3 楼 shine333 的回复:

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

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

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求教一个运行效率问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!