java - 在 Java 中,是 substring(int k, int y) 还是 substring(int k) 更高效?

标签 java string performance jvm substring

例如,假设我有以下代码:

String s1 = "foobar";
s1 = s1.substring(3);

该代码的效率是否低于:

String s1 = "foobar";
s1 = s1.substring(3, 6);

我认为双参数方法在性能方面会更高效,因为单参数方法使用循环遍历索引直到达到长度。这意味着 JVM 必须调用 length() 方法来确定何时停止循环。

但是两个参数的方法只会循环直到到达最后一个索引号。

谁能证实或否定我的假设?

编辑: 我不太理解源代码中的这段代码(最后一个 return 语句),但这里是 java String 类源代码:

public String substring(int beginIndex, int endIndex) {
    if (beginIndex < 0) {
        throw new StringIndexOutOfBoundsException(beginIndex);
     }
     if (endIndex > count) {
        throw new StringIndexOutOfBoundsException(endIndex);
     }
    if (beginIndex > endIndex) {
    }
    return ((beginIndex == 0) && (endIndex == count)) ? this :    // I don't understand this part
         new String(offset + beginIndex, endIndex - beginIndex, value);
}

最佳答案

String.substring()是常数时间1,它只是提供原始字符串的较小 View 。此外,具有一个参数的版本只是......委托(delegate)给具有两个参数的版本:

public String substring(int beginIndex) {
    return substring(beginIndex, count);
}

其中 countString.length() 返回的值。您选择哪个版本并不重要,它们都非常快。

1 - 显然是 no longer true从 Java 7 更新 6 开始。但这与您的问题无关。

关于java - 在 Java 中,是 substring(int k, int y) 还是 substring(int k) 更高效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13652943/

相关文章:

c# - 将所有标记的字符串更改为另一个字符串

Java:如何删除 £ 之前出现的 Â 字符

performance - 任何算法的时间复杂度是否有可能随着输入大小的增加而降低,例如

java - 无法导入 WindowsFileAttributes

Java - 对象引用或标识符?

ruby - 从字符串中删除所有非字母、非数字字符?

c++ - 反转数字的最有效方法

c - 使用更多内存会降低性能吗?

java - 请求作用域的 bean 和数据模型初始化?

java - 从另一个方法调用一个方法时如何传递参数