求教一个运行效率问题

安迪 2014-07-01 02:37:24
Integer x=500;
1.String str=""+500;
2.String str=String.ValueOf(x)

1和2 哪个效率高?

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

多谢多谢
...全文
146 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
oh_Maxy 2014-07-01
  • 打赏
  • 举报
回复
引用 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));
    }
安迪 2014-07-01
  • 打赏
  • 举报
回复
非常感谢你的回答和解释。第二个说的很有道理。多谢提点。大概是我太拘泥于java语言的算法。而忽视了数学上的算法。
shine333 2014-07-01
  • 打赏
  • 举报
回复
对不起,纠正一下。 1 快。 如果""+500两边都是常量,会被直接编译成“500”这个静态的字符串。 但是,如果加号两边任何一个是动态值(比如函数调用)的话,那么使用+拼接,会导致StringBuilder的隐式参与 最终执行的代码是 String str = new StringBuilder(左边).append(右边).toString();
安迪 2014-07-01
  • 打赏
  • 举报
回复
能说一下为什么么?
shine333 2014-07-01
  • 打赏
  • 举报
回复
2 效率高。 至于累加,难道不该用等差数列的计算公式吗?? (1 + n)× n / 2 如果n很大会导致越界,考虑BigInteger
内容概要:本文介绍了一种基于双层优化的微电网系统规划设计方法,旨在通过Matlab代码实现,解决微电网在规划与运行中的多目标、多层次决策问题。该方法将优化过程分为上下两层:上层通常负责容量配置、设备选址等长期规划决策,下层则聚焦于能量管理、出力调度等短期运行优化,通过迭代交互实现全局最优。文中详细阐述了模型构建、约束条件设定、目标函数设计及求解算法实现流程,并提供了完整的Matlab代码供复现实验,有助于深入理解微电网系统的设计逻辑与优化机制。; 适合人群:具备一定电力系统基础知识和Matlab编程能力,从事新能源、微电网、综合能源系统等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 学习和掌握双层优化理论在微电网规划设计中的具体应用;② 通过阅读和运行Matlab代码,复现并改进经典优化模型,用于学位论文、科研项目或实际工程方案设计;③ 深入理解微电网中分布式能源、储能与负荷的协同优化调度策略。; 阅读建议:此资源以Matlab代码实现为核心,强调理论与实践的结合。建议读者先理解双层优化的基本思想和数学模型,再结合代码逐行分析,重点关注变量定义、约束条件的代码转化以及主从问题间的迭代逻辑。鼓励在提供的代码基础上进行参数调整、场景扩展或算法改进,以深化学习效果。

67,536

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧