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()
只是本示例的占位符操作。
String
和 StringBuilder
均由数组支持,charAt()
获取指定索引处的值。
由于String
是不可变的,它必须在返回数组之前进行防御性复制。所以它有一些额外的开销。但是 imo,这只会是非常大的字符串或将许多字符串重复转换为数组的问题。这完全取决于您如何使用它。
我理解 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()
只是本示例的占位符操作。
String
和 StringBuilder
均由数组支持,charAt()
获取指定索引处的值。
由于String
是不可变的,它必须在返回数组之前进行防御性复制。所以它有一些额外的开销。但是 imo,这只会是非常大的字符串或将许多字符串重复转换为数组的问题。这完全取决于您如何使用它。