介绍最近在刷知乎的时候看到一个很有意思的问题。变量声明在循环内还是循环外?有人认为应该定义循环。在体外,不应在循环体中定义。很多java代码优化建议都有这样的建议:不要在循环中不断创建对象引用,例如:for(inti=1;i<=count;i++){Objectobj=newObject();}这种做法会导致countinmemory有Object对象引用,如果计数很大,会消耗内存。建议改为:Objectobj=null;for(inti=0;i<=count;i++){obj=newObject();}这种情况下,内存中只有一个Object对象引用,每一个newObject()时,Object对象引用指向了不同的Object,但内存中只有一份,大大节省了内存空间。这个建议应该出现在很多公司的代码规范中。接下来我们分析一下变量声明在循环体内,变量声明循环在循环外的情况。效率对比首先我们看一下写在循环内和查询循环外的效率对比。测试代码如下:/***@author:公众号【javafinance】*@Date:*@Description:*/@BenchmarkMode(Mode.AverageTime)//测试完成时间@OutputTimeUnit(TimeUnit.NANOSECONDS)@Warmup(iterations=2)//2轮预热,每次1s@Measurement(iterations=5)//5轮测试,每次1s@Fork(1)//fork1线程@State(Scope.Thread)publicclassForEachBenchMark{publicstaticvoidmain(String[]args)throwsRunnerException{Optionsopt=newOptionsBuilder().include(ForEachBenchMark.class.getSimpleName()).result("result.json").resultFormat(ResultFormatType.JSON).build();newRunner(opt).run();}@Param(value={"10","50","100"})privateintlength;/***在循环外创建对象*@paramblackhole*/@BenchmarkpublicvoidoutsideLoop(Blackholeblackhole){Objectobject=null;for(inti=0;iinsideLoop(){List