繁体   English   中英

更改String vs if语句的值的性能

[英]Performance of changing the value of a String vs if statement

我在这里看着约翰的答案并认为它很漂亮。 我想知道是否可以使用if语句进一步改进,但我不确定if语句是否会表现更好。

if语句是否比更改String的值“花费更多”?

String prefix = "";
for (String serverId : serverIds) {
  sb.append(prefix);
  prefix = ",";
  sb.append(serverId);
}

VS.

String prefix = "";
for (String serverId : serverIds) {
  sb.append(prefix);
  if( prefix.equals( "" ) {
      prefix = ",";
  }
  sb.append(serverId);
}

第二个版本肯定会慢一些。 它不仅仅是一个if,而且是一个equals调用,并且大多数情况下两个比较字符串将是不同的,因此equals方法不会提前返回 - 相反它比简单的赋值做更多的工作(查看源代码String中的equals方法的详细信息)。

当然,大部分时间的可读性比速度更重要,而Guava Joiner可以帮助您编写非常清晰的代码。

更多版本

boolean addPrefix = false;
for (String serverId : serverIds) {
  if (addPrefix) {       // it's better than String.equals
      sb.append(',');    // append char is faster than append String
  } else {
      addPrefix = true;  
  }
  sb.append(serverId);
}

假设serverIds永远不会为空,这可以是一个替代品

for (String serverId : serverIds) {
     sb.append(serverId).append(',');
}
sb.deleteCharAt(sb.length() - 1);

如果serverIds是List,则不要使用for-each - 它创建Iterator(Object)和Iterator.next检查并发修改

for (int i = 0; i < serverIds.size(); i++) {
  if (i > 0) {
      sb.append(',');
  }
  sb.append(serverId.get(i));
}

对于数组来说

for (int i = 0; i < serverIds.length; i++) {
  if (i > 0) {
      sb.append(',');
  }
  sb.append(serverId[i]);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM