我想知道使用.charAt()是否比使用字符串变量s
转换为char [] a
数组更慢,并通过a[i]
而非{{1}访问它}?
假设我们正在研究字符串中每个字符上有很多运算符的问题。
答案 0 :(得分:7)
Oracle Java 7的String#charAt(int index)
实现:
public char charAt(int index) {
if ((index < 0) || (index >= value.length)) {
throw new StringIndexOutOfBoundsException(index);
}
return value[index];
}
检查有点安全,但这是完全相同的行为。
返回char[]
public char[] toCharArray() {
// Cannot use Arrays.copyOf because of class initialization order issues
char result[] = new char[value.length];
System.arraycopy(value, 0, result, 0, value.length);
return result;
}
因为你必须先复制它。
答案 1 :(得分:1)
实际上,String
类已经这样做,因为它将其内容保存为char[]
。
public char charAt(int index) {
if ((index < 0) || (index >= count)) {
throw new StringIndexOutOfBoundsException(index);
}
return value[index + offset];
}
其中value
是持有字符串的char[]
,而offset
是允许两个或多个字符串共享相同字符数组的东西,就像一个字符串是另一个字符串的子字符串一样。< / p>
答案 2 :(得分:1)
如果您看到Source code of charAt()条评论,就会找到答案。
它已经从char array
返回,所以无法再次比较它。
private final char value[];
返回指定索引处的char值。索引的范围从0到length() - 1.序列的第一个char值在索引0处,下一个在索引1处,依此类推,就像数组索引一样。 如果索引指定的char值是代理项,则返回代理值。
答案 3 :(得分:1)
无论性能如何,如果您主要将对象视为char数组,那么如果将其设为char数组,则代码可能会更清晰。
知道重复charAt调用的开销是否比复制char []的成本更重要的唯一方法是用你的实际操作和字符串长度来衡量。