通常在代码中我得到的场景我需要一个临时变量 - 例如:
String tempUserName = input.getUserName(); tempUserName = sanitzie(tempUserName); validate(tempUserName); // ... Do something else with tempUserName String tempUserNickName = input.getUserNickName(); tempUserNickName = sanitzie(tempUserNickName); validate(tempUserNickName); // ... Do something else with tempUserNickName ... ...
我知道有些人使用单个临时变量来做这些事情:
String temp = input.getUserName(); temp = sanitzie(temp); validate(temp); // ... Do something else with temp temp = input.getUserNickName(); temp = sanitzie(temp); validate(temp); // ... Do something else with temp ... ...
在我看来 - 我写它的方式更清晰,更不容易出错。
我的问题是 - 使用单个临时变量有什么好处:
让我们将问题的范围仅限于String
个变量 - 但我很乐意获得更一般的反馈。
答案 0 :(得分:2)
内存消耗和性能无关紧要,但每个非final的var都会使代码更难阅读。你永远不能一眼就看出它被重新分配的确切位置,如果你正在寻找一个bug,这会给你带来困难。我的建议,以及我在代码中经常做的是提取到一个方法,所以你甚至不需要调用端的本地var。总是倾向于根据函数组合编写代码。
答案 1 :(得分:2)
我也不想重复使用局部变量,而且性能方面在这里并不重要,因为你可以获得或失去这么微小的时间,它可以忽略不计。无论如何,JIT可以为两者生成相同的本机代码。
重要的是可读性和可维护性。我在你的代码中看到的是应该有一个额外的方法,以便你的原始代码成为:
sanitizeAndValidate(input.getUserName());
sanitizeAndValidate(input.getUserNickName());
这使代码更清晰,更可测试,避免重复,并使您的初始问题无关紧要,因为您的临时变量仅在sanitizeAndValidate()
方法中定义一次。
答案 2 :(得分:1)
我对此的主要答案是,如果您有一系列这类陈述,我会将分组分解为您调用的单独函数。 (这只有一个临时变量。)例如:
private String handleInput(String val) {
val = sanitzie(val);
validate(val);
// ... Do something else with val
return val;
}
用法:
String finalPlaceForUserName = handleInput(input.getUserName());
String finalPlaceForUserNickName = handleInput(input.getUserNickName());
...其中handleInput
可能会因无效或危险的输入而返回null
等。您可能需要更多地handleInput
参数化。
回答你提出的观点:
内存消费视角
我认为技术上,如果只有一个临时变量,之前的内存将有资格进行垃圾收集(例如,而方法正在运行而不是之后)。但我怀疑这会产生任何现实世界的差异。
绩效观点
我无法想象。
任何其他观点
我们可能会在这里找到风格,这主要取决于个人喜好。再一次,我将它拆分成一个函数,这是一个围绕这个问题的终结。 : - )
答案 3 :(得分:0)
考虑到性能差异(记忆明智)要小。
更重要的是让您的代码可读,并在重要的地方优化。
答案 4 :(得分:0)
虽然这些重复不是很好的风格,但仍会发生。我经常这样做:
{
String s = ...
something with s;
}
{
String s = ...
something with s;
}