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

Performance comparison of charAt() method of String vs StringBuilder in Java

我理解 StringBuilder is faster than String 当涉及到需要某种变异的操作时。但是,如果我只想访问 特定字符 而不需要其他操作,那么两者的 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));
}

此外,是否有 benefits/drawbacks 以这种方式(使用 char[])代替?

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

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

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

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