Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java字符串-比较charAt()和索引运算符[]_Java_String_Indexing_Character - Fatal编程技术网

Java字符串-比较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是允许两个或

我想知道使用.charAt()是否比将字符串变量
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#编码的习惯。谢谢!