Java字符串-比较charAt()和索引运算符[]
我想知道使用.charAt()是否比将字符串变量Java字符串-比较charAt()和索引运算符[],java,string,indexing,character,Java,String,Indexing,Character,我想知道使用.charAt()是否比将字符串变量s转换为char[]a数组并通过a[I]而不是s.charAt(I)访问它要慢 假设我们正在处理的问题是,字符串中的每个字符上都有很多运算符。实际上,string类已经这样做了,因为它将其内容保存为char[] 返回 公共字符(int索引){ 如果((索引=计数)){ 抛出新StringIndexOutOfBoundsException(索引); } 返回值[索引+偏移]; } 其中value是保存字符串的char[],而offset是允许两个或
s
转换为char[]a
数组并通过a[I]
而不是s.charAt(I)
访问它要慢
假设我们正在处理的问题是,字符串中的每个字符上都有很多运算符。实际上,
string
类已经这样做了,因为它将其内容保存为char[]
返回
公共字符(int索引){
如果((索引<0)| |(索引>=计数)){
抛出新StringIndexOutOfBoundsException(索引);
}
返回值[索引+偏移];
}
其中
value
是保存字符串的char[]
,而offset
是允许两个或多个字符串共享同一字符数组的东西,就像一个字符串是另一个字符串的子字符串一样。实际上,string
类已经这样做了,因为它将其内容保存为char[]
返回
公共字符(int索引){
如果((索引<0)| |(索引>=计数)){
抛出新StringIndexOutOfBoundsException(索引);
}
返回值[索引+偏移];
}
其中
value
是保存字符串的char[]
,而offset
是一种允许两个或多个字符串共享同一字符数组的东西,就像一个字符串是另一个字符串的子字符串一样。Oracle Java 7的字符串#字符(int-index)
的实现:
public char charAt(int index) {
if ((index < 0) || (index >= value.length)) {
throw new StringIndexOutOfBoundsException(index);
}
return value[index];
}
因为您必须先复制它。针对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];
}
因为你必须先复制它。如果你看到评论,你就会找到答案
它已经只从其字符数组返回了
,因此无法再次比较它
private final char value[];
返回指定索引处的char值。索引的范围从0到length()-1。序列的第一个char值位于索引0处,下一个char值位于索引1处,依此类推,对于数组索引也是如此。
如果索引指定的char值是代理项,则返回代理项值
如果你看到评论,你就会找到答案
它已经只从其字符数组返回了
,因此无法再次比较它
private final char value[];
返回指定索引处的char值。索引的范围从0到length()-1。序列的第一个char值位于索引0处,下一个char值位于索引1处,依此类推,对于数组索引也是如此。
如果索引指定的char值是代理项,则返回代理项值
无论性能如何,如果主要将对象视为字符数组,那么如果将其设置为字符数组,代码可能会更清晰
要知道重复charAt调用的开销是否比复制char[]一次的成本更重要,唯一的方法是测量实际操作和字符串长度。如果主要将对象视为一个char数组,则无论性能如何,如果将代码设置为char数组,则代码可能会更清晰
要知道重复charAt调用的开销是否比复制char[]一次的成本更重要,唯一的方法是测量您的实际操作和字符串长度。测试并不完全是您想要的,但足够接近。不仅仅是接近&它回答了这个问题:它取决于字符串长度(或者实际上,你访问一个字符的次数和字符串长度是相同的,如果你在每个字符上循环)测试并不完全是你要问的,但足够接近。不仅仅是接近&它回答了这个问题:它取决于字符串长度(或者实际访问一个字符的次数,以及循环每个字符时相同的字符串长度)是的!我认为我无法查看方法的源代码^^我猜是使用C#编码的习惯。谢谢!是的!我认为我无法查看方法的源代码^我猜是使用C#编码的习惯。谢谢!