私有变量与本地函数变量

时间:2015-03-19 11:51:12

标签: java

为了提高效率,我想问下面的问题。例如,如果你想在函数中一遍又一遍地重复使用相同的变量而没有将其转换为局部变量的额外成本,那么你会声明一个“全局”变量(因为这需要重新初始化它)当我们再次调用该函数时变量。)

在Java中我不太确定什么是最好的,有一个局部变量并反复重新初始化它(也许优化器足够聪明以便记住它?)或者在类中单独声明它作为私有变量?我的直觉告诉我后者应该更好(这就是我目前所做的)但我并不完全确定是这样的。

当然请排除多线程场景,其中原子性将成为一种东西。

4 个答案:

答案 0 :(得分:3)

我认为that回答可能会对您有所帮助。他编写了一个微基准来确定本地变量和实例变量的访问速度。

结果显示局部变量访问比实例变量访问快约1%(即使两者都指向同一个对象)。

答案 1 :(得分:1)

不要试图在如此低的水平上调整性能。结果代码的性能在很大程度上取决于编译器,但是这么小的改进"根本不会有任何显着的增加,因为你只是在谈论为一个变量分配一个简单的值,这不需要花费很多时间(如果我们谈论每次调用时创建的复杂对象,那显然是不同的,但是你的问题是关于初始化变量,所以我回答这个问题。

但是,将一个仅与单个函数相关的变量作为类的字段确实会损害代码的可读性和自我表达,因为该字段根本不与该类的实例相关。 / p>

结论:如果变量是局部函数变量,则将其放入本地函数范围。如果是字段,则将其作为字段。不要试图以这种方式调整性能。

答案 2 :(得分:-1)

您不能将所有本地方法变量直接转换为实例变量。如果你这样做,你将破坏你的代码。

实例变量用于特定目的 - 它定义了对象的状态。你问的问题可以通过使用静态变量来解决(可能也是最终的 - 取决于具体情况)。如果使用静态变量 - 它将可用于您创建的所有对象。但它会与线程安全性妥协,因为任何对象都可以修改它。

答案 3 :(得分:-2)

私有变量可在类中访问,而本地函数变量只能在函数内访问。