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

Java 什么时候创建临时助手变量才有意义?,java,Java,我想知道在哪些情况下,您更愿意创建某种“helper”变量来访问一个可能在方法中使用2次或更多次的值 我在以下截取过程中遇到了这个问题:什么更好:两次访问列表的大小值,还是创建一个保存列表大小的整数变量 List<String> list; private myIndexHelper() { if (list.size % 2 == 0) { return PREFIX + list.size; } return ""; } private

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

我在以下截取过程中遇到了这个问题:什么更好:两次访问
列表的
大小
值,还是创建一个保存列表大小的
整数
变量

List<String> list;

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

private myIndexHelper() {
    int size = list.size;
    if (size % 2 == 0) {
        return PREFIX + size;
    }
    return "";
}
列表;
私有myIndexHelper(){
如果(list.size%2==0){
返回前缀+list.size;
}
返回“”;
}
私有myIndexHelper(){
int size=list.size;
如果(大小%2==0){
返回前缀+大小;
}
返回“”;
}

我知道这可能是过度优化了。但一般来说(忽略性能):您是更愿意访问list.size属性numerus times,还是创建一个保存大小的变量?

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

private myIndexHelper() {
    if (dataStricture.subDataStructure.list.size % 2 == 0) {
        return PREFIX + dataStricture.subDataStructure.list.size;
    }
    return "";
}
然后我会使用变量方法,但否则没什么大不了的

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

正如我所说,在这段代码中,没有什么大不了的。

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

  • 调用
    list.size
    或本地
    size
    参数时,其性能相同
  • 根据,可能会导致性能改进
  • “易用性”的唯一方面是,当您需要一个“较短”的参数时,可以使用:一个本地
    size
    参数,而不是
    myListOfReallyNiceIntegers。size
    将更易于读/写(使用for循环等)

  • 由于目前通常有大量可用内存,因此最好添加一个helper变量,因为它可以提高代码的可读性(尽管这取决于具体情况,因为我个人认为函数调用在这种情况下可读性更强-除非它们类似于object.ref.function(object2.ref2.anotherFunction())或更差)


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

    当list.size转换为半行mumbo-jumbo方法调用时,这是有意义的。另外,如果一个方法消耗资源,您宁愿调用该方法一次。例如,
    int documentLength
    list.size
    更有意义。如果不这样做,似乎违反了“不要重复自己”的原则。这是一个没有任何区别的优化。但是,在多线程设计中,每次调用时使用
    list.size()
    可能会产生不同的结果。通过使用局部参考,结果将至少与使用的算法一致。