对于任何给定的输入,代码是否在内存中占用恒定空间?

时间:2016-10-16 21:19:05

标签: java string memory

public static String switchString(String word, int i, int j) {
    StringBuilder newString = new StringBuilder();
    newString.append(word.substring(j, word.length()));
    newString.append(word.substring(i + 1, j));
    newString.append(word.substring(0, i + 1));
    return newString.toString();
}

对于给定的输入String以及索引ij,代码应该执行以下操作:if word = “abcdef”i = 1,{{1 }}。输出应该是:“defcab”。

假设单词不是j = 3nulli不在界外,则代码可以正常工作。我想知道,对于任何给定长度的字符串,这个程序是否通过这种方法在内存中占用恒定空间。

1 个答案:

答案 0 :(得分:1)

在Java中,String是不可变的。致电substring会产生新的String

如果您的String word长度为n,则最终会生成总长度为n的子字符串。

StringBuilder的大小是不变的。每个String中存储的元数据也是不变的。字符串的长度有什么变化。

因此,不,这种方法不使用常量空间,而是使用n空格。