针对此问题,csdn上一般都有3种解释
1.非要较真的话,就是第一种循环结束所有创建的对象就可以被回收。第二种最后一个创建的要等到方法结束才会被回收
2.https://www.zhihu.com/question/31751468/answer/88626975 知乎哥们给的解释 或者 https://will-turner.iteye.com/blog/1604671的解释3.将变量声明在循环体外的做法的确节省不了多少空间,while长时间循环,确实节约了不少内存,约节约了50%或者更多,数据量小的场景未进行测试
以上3种解释听着都很有道理,按知乎的方式进行反编译效果一致,但实际变异存在差异。根据以上认知亲测,代码运行时长无明显差异,差异点在于Edin
内存消耗的区别
故结论:二者均可以,建议使用外部构建对象(jdk 1.8.0_45)
图三、图四属于编译器编译后的结果,若for对象在循环外定义.初始化为null或者未初始化为null,则编译的效果不同.不设置为null时则为知乎的哥们截图所示
若设置则见图四,至于此种对内存的消耗暂为通过分析工具进行分析
public class ForTestOut {
public void out() {
User user = null;
while (true) {
user = new User();
user.setAge(0);
}
}
public static