Java中String与StringBuilder的charAt()方法性能对比

时间:2021-06-18 17:13:20

标签: java string time stringbuilder

我知道 StringBuilderString 在需要某种变异的操作方面更快。但是,如果我只想访问特定字符而不需要其他操作,那么两者的 charAt() 方法之间是否有性能差异?

举个简单的例子,如果我需要打印字符串的替代字符,从第一个字符开始,有没有什么首选的方法可以做到这一点,下面给出的两个?

// 1
String dummyStr = "fhweyxnqwiynfgHINYUIYIOhuiw12341dfs";
for (int i = 0; i < dummyStr.length(); i += 2) {
    System.out.print(dummyStr.charAt(i));
}

// 2
StringBuilder dummySb = new StringBuilder(dummyStr);
for (int i = 0; i < dummySb.length(); i += 2) {
    System.out.print(dummySb.charAt(i));
}

此外,以这种方式(使用 char[])这样做有什么好处/缺点吗?

// 3
char[] dummyArr = dummyStr.toCharArray();
for (int i = 0; i < dummyArr.length; i += 2) {
    System.out.print(dummyArr[i]);
}

请注意:
对于这个问题,我只关心时间方面的性能,而不关心使用的额外内存。此外,对于本示例而言,System.out.print() 只是一个占位符操作。

1 个答案:

答案 0 :(得分:1)

StringStringBuilder 都由数组支持,charAt() 获取指定索引处的值。

由于 String 是不可变的,它必须在返回数组之前进行防御性复制。所以它有一些额外的开销。但是 imo,这只会对于非常大的字符串或将许多字符串重复转换为数组来说是一个问题。这完全取决于您如何使用它。

相关问题