什么时候临时助手变量的创建有意义?

时间:2013-11-06 16:07:17

标签: java

我想知道在哪些情况下您更愿意创建某种“帮助”变量来访问可能在方法中使用2次或更多次的值。

我在跟踪剪辑时遇到了这个问题:什么是更好的:两次访问size的{​​{1}}值,或创建一个包含列表大小的List变量?

Integer

我知道这可能是过度优化。但总的来说(忽略性能):你宁愿访问list.size属性numerus次数,还是创建一个保持大小的变量?

3 个答案:

答案 0 :(得分:1)

我们没有“更好”的方法:

  1. 当您致电list.size或本地size参数时,其性能相同
  2. 根据Doug Leadeclaring a local parameter as final可能会带来绩效改善
  3. “易用性”的唯一方面是当你想要一个“更短”的参数,所以通过使用:一个本地size参数而不是myListOfReallyNiceIntegers.size将更容易读/写(与for-loops等)。

答案 1 :(得分:0)

在这种情况下,我会说可读性,如果它是可读的,那么两种方式都可以。如果另一方面它是

private myIndexHelper() {
    if (dataStricture.subDataStructure.list.size % 2 == 0) {
        return PREFIX + dataStricture.subDataStructure.list.size;
    }
    return "";
}

然后我会采用变量方法,否则没什么大不了的。

但是,如果这是一个循环或时间关键的方法,那么在循环内(或在时间关键方法内)调用list.size只会浪费额外的时间进行方法调用,应该避免。

就像我说的那样,在这段代码中,没什么大不了的。

答案 2 :(得分:0)

由于目前通常有足够的内存可供添加辅助变量,因为它可能会提高代码的可读性(尽管这取决于我个人认为在这种情况下函数调用更具可读性 - 除非它们就像object.ref.function(object2.ref2.anotherFunction())或者更糟糕。)

我认为值得一提的是,有时这是一个好习惯:当你在一个循环中多次使用一个值,并且这个值发生变化时,最好将这个值存储在一个变量而不是重新 - 每次计算它(在一个循环中,处理器操作的实际数量可能会非常快地增长。)好的编译器经常会检测到在循环中重新计算相同值的情况并自己创建变量,但这不是一个好的做法在效率的情况下依赖于编译器。特别是如果你可以通过稍微改变代码来实现它。