【Java】变量声明在循环体内还是循环体外你选哪一个咧?
引言
最近刷知乎的时候看到一个比较有意思的问题,变量声明在循环体内还是循环体外?这个问题有人认为应该定义循环体外,不应该定义在循环体内。很多java代码优化建议都有这么一条建议:
循环内不要不断创建对象引用
例如:
这种做法会导致内存中有count
份Object
对象引用存在,count
很大的话,就耗费内存了,建议为改为:
这样的话,内存中只有一份Object
对象引用,每次new Object()
的时候,Object
对象引用指向不同的Object
罢了,但是内存中只有一份,这样就大大节省了内存空间了。这条建议应该也出现过在很多公司的代码规范上了吧。下面我们就来分析下变量声明在循环体内和变量声明循环体外的情况。
效率对比
首先我们先来看看写在循环体内和询环体外的效率比对,测试代码如下:
测试结果如下:
我们可以发现不管在循环外创建对象和循环内创建对象时间几乎都是一样的。
字节码对比
下面我们准备两个测试类
```java
LocalVariableTable:
Start Length Slot Name Signature
0 49 0 this Lcom/workit/autoconfigure/autoconfigure/controller/OutsideTest;
8 41 1 list Ljava/util/List;
10 39 2 o Ljava/lang/Object;
12 37 3 n I
47 2 4 b Ljava/lang/Object;
```
这是比较极端的情况下有1个solt的差距,如果把上述的代码 Object b = 2;就不会存在solt
复用了。
总结
整体看下来貌似内存和效率都差不多。从“局部变量作用域最小化”原则上来说,变量声明在循环体内更合适一点,这样代码的阅读性更好。
结束
由于自己才疏学浅,难免会有纰漏,假如你发现了错误的地方,还望留言给我指出来,我会对其加以修正。
如果你觉得文章还不错,你的转发、分享、赞赏、点赞、留言就是对我最大的鼓励。
感谢您的阅读,十分欢迎并感谢您的关注。
巨人肩膀
https://www.zhihu.com/question/31751468
版权声明: 本文为 InfoQ 作者【java金融】的原创文章。
原文链接:【http://xie.infoq.cn/article/f40c258a900d24a5752bf47eb】。文章转载请联系作者。
评论