【问题标题】:Correct coding practices with strings, variables, loops - Java (Android)使用字符串、变量、循环的正确编码实践 - Java (Android)
【发布时间】:2013-02-26 16:28:55
【问题描述】:

我是 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
}

那会怎么样?

谢谢,我知道这可能会吹毛求疵,并不会产生太大影响,但我宁愿以正确的方式学习这些常见任务。

【问题讨论】:

  • 除非你注意到你的代码很慢,否则不要为小事操心。不要prematurely optimize,尤其是如果它使代码的可读性降低。

标签: java android performance


【解决方案1】:

字符串:

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

在循环时,使用 StringBuilder 或 Buffer。

局部变量:

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

循环:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多