使用字符串,变量,循环纠正编码实践 - Java(Android)

时间:2013-02-26 16:28:55

标签: java android performance

我是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倍,这很好,反而更容易编写,但是,如果我需要索引怎么办?目前为止据我所知,在增强循环中,我需要自己跟踪它,就像这样

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
}

怎么会这样?

谢谢,我知道这可能是挑剔,并没有那么大的差别,但我会以正确的方式学习这些常见的任务。

1 个答案:

答案 0 :(得分:1)

字符串:

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

当你循环时,使用StringBuilder或Buffer。

局部变量:

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

循环:

根据循环的类型,使用增强循环可以提供大量或可忽略的改进,最好阅读您正在使用的循环。