Local variables 重用类级变量还是创建新的局部变量?

Local variables 重用类级变量还是创建新的局部变量?,local-variables,class-variables,Local Variables,Class Variables,这个问题我已经被问过很多次了,但都是以不同的方式提出的,答案从来都不是我一直在寻找的。我相信我可以做一些测试,但我觉得这对其他人来说可能是一个很好的资源,也许可以得到一些关于这个问题的意见 问题是:我有一个实现配置接口的类。继承的每个方法通常都有一个变量。最常见的是通用的对象 如果这些方法被一次又一次地调用,那么创建临时类级变量(每次调用一个方法时都会被覆盖)或者每次创建一个新变量会更有效吗 尤其是在循环中。我通常尝试将所有变量保持在本地,但最近与我一起工作的一位程序员做了相反的事情,并更改了

这个问题我已经被问过很多次了,但都是以不同的方式提出的,答案从来都不是我一直在寻找的。我相信我可以做一些测试,但我觉得这对其他人来说可能是一个很好的资源,也许可以得到一些关于这个问题的意见


问题是:我有一个实现配置接口的类。继承的每个方法通常都有一个变量。最常见的是通用的对象

如果这些方法被一次又一次地调用,那么创建临时类级变量(每次调用一个方法时都会被覆盖)或者每次创建一个新变量会更有效吗

尤其是在循环中。我通常尝试将所有变量保持在本地,但最近与我一起工作的一位程序员做了相反的事情,并更改了我的一些代码,因为如果我需要进行修改,它在将来可能更容易更改


如果这让人困惑,下面是我的意思的一个例子:

// Reused Local Variable
private Object tempObject;

public char getChar(String key) {
    tempObject = get(key); /* method that grabs and object from a map */

    // more code...
}


// Recreated Local Variable
public char getChar(String key) {
    Object tempObject = get(key);

    // more code...
}

请不要将此标记为重复问题。有很多这样的问题,但他们都有不同的回答,差异很大

我做了我的研究,所以不要说我没有。(在这个网站上似乎是一个大问题。你再也找不到任何帮助了,因为人们很快就在没有阅读的情况下标记帖子,仅仅因为它们与其他帖子相似)

这些答案是:,说明如果你想重新格式化你的代码,你会无缘无故地为自己做更多的工作。根据编译器的不同,它可以自动将代码重构到最佳用途。但是,如果有多个用户在不同的编译器上编译代码,那么一个构建可能会多得多


这些答案:,似乎只是在单个方法中重用变量。或者为不同的值或值类型重用变量。如果该值执行与第一个值不同的操作,则它应该有自己的名称。除非所述变量的命名是通用的,并且可以用于不同的事情。整数“i”可能不是最好的重用方法,因为它非常常见,可能会在其他地方使用,从而导致冲突。像“score”这样的东西可以重复使用,只要你在其中投入的价值是相关的和兼容的。

我将对前面提到的问题的一些答案稍作重申。对于可维护性,使用局部变量

如果使用局部变量,那么编辑或调试此代码的任何人(包括您自己,几个月后)都会立即知道只有
getChar()
方法中的代码才能更改
tempObject
的值。知道这件事很有用

另一方面,如果您将其定义为一个实例变量,那么事情就会复杂得多。假设您正在考虑让您的
getChar
方法调用另一个实例方法(我们称之为
foo
)。然后,突然之间,您不得不花时间弄清楚
foo
是否依赖或更改
tempObject
的值。以及调用
foo
的任何方法是否会改变它。等等

还有很多其他类似的问题可能会出现。我甚至都没有涉及到线程问题


使用局部变量可以让将来阅读代码的人清楚地知道到底发生了什么-这里只使用它。如果将其作为实例变量,每个人都必须停下来思考。

有趣的是,人们根本不想提供帮助,甚至根本不想给出任何建议。相反,他们只是否决这个话题并/或报告它。这个网站太棒了。我爱这里所有乐于助人的人。