Java 什么更有效率?存储变量引用与否(Android中的上下文) 我们假设在一个方法的中间。我可以在两种编程风格中进行选择

Java 什么更有效率?存储变量引用与否(Android中的上下文) 我们假设在一个方法的中间。我可以在两种编程风格中进行选择,java,android,performance,optimization,Java,Android,Performance,Optimization,选项A:每次需要访问资源时都使用getContext.getResources public void doSomeStuffA(){ //... getContext().getResources().getDrawable(R.drawable.ic_launcher); getContext().getResources().getDrawable(R.drawable.ic_arrow); //... } 选项B:将getContext.getResources存

选项A:每次需要访问资源时都使用getContext.getResources

public void doSomeStuffA(){
  //...
  getContext().getResources().getDrawable(R.drawable.ic_launcher);
  getContext().getResources().getDrawable(R.drawable.ic_arrow);      //...
}
选项B:将getContext.getResources存储在变量中

public void doSomeStuffB(){
  //...
  Resources r = getContext().getResources();
  r.getDrawable(R.drawable.ic_launcher);
  r.getDrawable(R.drawable.ic_arrow);
  //...
}

哪种样式更好?

作为一般惯例,在这种情况下不是特别的

使用选项A:

资源不断变化,您需要资源的最新值


如果只调用一次资源上的方法

使用选项B:

资源不会改变,那么您可以使用引用,并在任何地方使用它。
就像在性能和调优方面的许多工作一样,正确的答案是这取决于具体情况。99%的情况下,额外的hashmap解引用与变量引用之间的差异不是最大的性能问题,甚至不是值得注意的性能问题。诀窍是要理解什么时候可能会出现问题,例如频繁的紧循环调用


在单个方法中,我倾向于使用选项B,主要是为了可读性。

使用Kotlin使所有内容整洁

fun someFun() {
    with(getContext()) {
        var d1 = getDrawable(R.drawable.ic1)
        val d2 = getDrawable(R.drawable.ic2)
        ...
    }
}

如果您多次调用资源上的方法,最好使用选项B。但有时如果资源不断变化,您必须调用资源使用选项a的最新值上的方法,您的意思是反之亦然?我更正了它,抱歉:P@Vwin我把它从4倍缩短到2倍。使用选项A更好吗?如果资源不变,我仍然会使用上述规则和选项B。效率可能不会有大的改变,但这仍然是一个很好的做法。然而,如果你有一个tstament,我会选择ASo选项,在你需要在同一范围内多次引用变量时,使用选项B?假设资源在两次引用之间没有变化是的,我会这么做。而且它肯定比获得资源要好每次资源都是不变的,它们怎么可能改变呢?我是在一般意义上说的。与其两次调用一个方法来获取某些东西,不如调用一次并使用该引用