gpt4 book ai didi

java - String的子串函数与StringBuffer的子串函数

转载 作者:行者123 更新时间:2023-12-01 18:18:29 27 4
gpt4 key购买 nike

我浏览了 StringStringBuffer API,当您调用 substring 方法时,两者的内部工作原理似乎相同。两者都有对原始 char 数组 (char[] original) 的引用,因此两者都使用相同的空间。那为什么首选StringBuffer呢?stringbuffer.substring(2,4) 与 string.substring(2,4) 有何不同。

StringBuffer的Substring方法:

public String substring(int start, int end) {
return new String(value, start, end - start);
}

字符串的子串方法:

public String substring(int beginIndex, int endIndex) {
return ((beginIndex == 0) && (endIndex == value.length)) ? this
: new String(value, beginIndex, subLen);
}

两个子字符串变体都调用 String 构造函数:

public  String(char value[], int offset, int count) {
this.value = Arrays.copyOfRange(value, offset, offset+count);
}

它调用Arrays类的以下方法:

public static char[] copyOfRange(char[] original, int from, int to) {
// **char[] original**
return copy;
}

最佳答案

在单个点上判断 String 的值与 StringBuffer 的值是错误的。是的,它们在获取子字符串时的功能非常相似。不,这不会引发关于是否使用其中之一的争论。

您应该始终使用最好的结构。 String 是不可变的,应该在需要不可变性时以及在某些边缘情况下使用。如果您需要对 CharSequence 进行更改,那么使用 StringBuilder 会更好/更安全/更快/内存效率更高。

考虑删除字符串的一部分。比较如何使用 String 和使用 StringBuilder 来完成此操作 - 看看它有多容易。它不仅更容易,而且更高效。 String 机制创建两个新对象,然后将它们添加在一起以形成第三个对象。 StringBuilder 只是删除字符串的一部分。

public void test() {
String a = "0123456789";
StringBuilder b = new StringBuilder(a);
System.out.println("a=" + a + " b=" + b);
a = a.substring(0, 2) + a.substring(5);
b.delete(2, 5);
System.out.println("a=" + a + " b=" + b);
}

关于java - String的子串函数与StringBuffer的子串函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28298634/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com