直接访问静态字段而不是调用静态getter方法,它更快吗?

时间:2012-02-16 11:49:41

标签: java android dalvik performance

我正在编写一个Android应用程序,我有一个类可以生成并维护一些偶尔可以更改的固定URL。我将它们全部保存在一个名为UrlUtils的类中:

public class UrlUtils {
  private static String sUrlBase = "http://google.com";

  /**
   * Called occasionally
   */
  public static void refreshUrlBases() {
        sUrlBase = "http://yahoo.com/" + new Random().nextInt();
  }

   public static String getUrlBase() {
        return sUrlBase;
   }
}

我必须在上面对getUrlBase()进行大量调用,因此我正在考虑将sUrlBase公开并直接访问它。这种方法在性能方面会更好吗?

4 个答案:

答案 0 :(得分:5)

是的,出于性能原因,您应该避免使用getter和setter。这是来自android“Designing for performance”doc。

的提示
  

没有JIT,直接字段访问速度比调用a快3倍   琐碎的吸气剂。使用JIT(直接现场访问便宜)   访问本地),直接字段访问速度比快7倍   调用一个微不足道的吸气剂。在Froyo中也是如此,但是会有所改善   JIT内联getter方法的未来。

答案 1 :(得分:2)

如果您不打算更频繁地更改网址,那么我会说getter/setter方法,而不是static方法,而是直接public static String google_url = "http://google.com"; public static String yahoo_url = "http://yahoo.com";

static

在保留static方法时,由于某些问题setter removed值为original(重置为原始值),可能会发生这种情况。因此,在这种情况下,它会返回static常量URL值。

<强>更新

如果您要更新dynamically static,那么method public static String sUrlBase = "http://google.com"; public static String getsUrlBase() { return sUrlBase; } public static void setsUrlBase(String sUrlBase) { this.sUrlBase = sUrlBase; } 将被证明是更好的选择。

{{1}}

答案 2 :(得分:0)

没有区别。您应该使用最简单的方法。通常,您应该使用getter和setter来实现可读性和代码实践。

答案 3 :(得分:0)

通常情况下,我不会过多担心URL等小型简单数据的性能,因此无论是直接字段访问还是使用方法访问都不会让我感到烦恼。 这对我来说有所不同的情况是,当getter调用的频率很高时,它会影响整体响应。 我担心的是意外更改值[bugs :(],因为该字段具有公共静态访问权限。当通过getter / setter访问时,至少有一个地方可以进行一些检查。