我是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
}
怎么会这样?
谢谢,我知道这可能是挑剔,并没有那么大的差别,但我会以正确的方式学习这些常见的任务。
答案 0 :(得分:1)
除非涉及到循环,否则编译器足够聪明,可以以最佳方式为您进行连接。
当你循环时,使用StringBuilder或Buffer。
您给出的两个例子是相同的。即使你从未给它起名,仍然需要分配内存。
根据循环的类型,使用增强循环可以提供大量或可忽略的改进,最好阅读您正在使用的循环。