1

我是 Android 开发人员,对 Java 并不陌生,但我对性能的最佳实践有一些疑问。我将从我的代码中给出一些示例,以便您做出决定。

字符串连接

url = "http://www.myserver." + domain + "/rss.php?"
+ rawType + rawCathegory + rawSubCathegory + rawLocality
+ rawRadius + rawKeyword + rawPriceFrom + rawPriceto;

据我所知,这将在创建我的 url 变量之前创建 11 个字符串对象,对吧?

我被教导使用 StringBuilder,但我的问题是,为了使其高效,连接的最少字符串量是多少?我认为使用它连接两个字符串没有多大意义,对吧?

局部变量

有时我尝试像这样“链接”方法调用

FilterData.getInstance(context).getFilter(position).setActivated(isActivated);

天真地避免变量分配,但它比这更快吗?

FilterData filterData = FilterData.getInstance(context);
Filter filter = filterData.getFilter(position);
filter.setActivated(isActivated);

我相信它应该为我自己保存一个局部变量,但如果方法名称很长等,它就会变得不可读。

循环

http://developer.android.com/training/articles/perf-tips.html说增强的 for 循环比常规 for 循环快 3 倍,很好,而且更容易编写,但是,如果我需要指数?据我所知,在增强的 for 循环中,我需要自己跟踪它,就像这样

int index = 0;
for(Object obj : objects) {
    // do stuff
    index++;
}

这仍然比常规循环快吗?

for(int i = 0; i < objects.size(); i++) {
   // do stuff
}

我认为增强的 for 循环可能会对该限制进行优化,所以也许如果 size() 对此进行了优化

int size = objects.size();
for(int i = 0; i < size; i++) {
   // do stuff
}

那会怎样?

谢谢,我知道这可能是吹毛求疵,并没有太大的不同,但我宁愿以正确的方式学习这些常见的任务。

4

1 回答 1

1

字符串:

除非涉及循环,否则编译器足够聪明,可以以最佳方式为您进行连接。

循环时,使用 StringBuilder 或 Buffer。

局部变量:

你给出的两个例子是相同的。即使您从未给它命名,仍然需要分配内存。

循环:

根据循环的类型,使用增强的循环可以带来巨大或微不足道的改进,最好阅读您正在使用的循环。

于 2013-02-26T16:34:57.377 回答