Dee*_*ohn 1 java string substring stringbuffer
我浏览了String和StringBufferAPI,当您调用该substring方法时,两者在内部的工作方式似乎相同。两者都有对原始字符数组 ( char[] original)的引用,因此两者都使用相同的空间。那为什么是StringBuffer首选呢?那么 stringbuffer.substring(2,4) 与 string.substring(2,4) 有何不同。
StringBuffer 的子串方法:
public String substring(int start, int end) {
return new String(value, start, end - start);
}
Run Code Online (Sandbox Code Playgroud)
字符串的子串方法:
public String substring(int beginIndex, int endIndex) {
return ((beginIndex == 0) && (endIndex == value.length)) ? this
: new String(value, beginIndex, subLen);
}
Run Code Online (Sandbox Code Playgroud)
两个子字符串变体然后调用 String 构造函数:
public String(char value[], int offset, int count) {
this.value = Arrays.copyOfRange(value, offset, offset+count);
}
Run Code Online (Sandbox Code Playgroud)
它调用以下 Arrays 类的方法:
public static char[] copyOfRange(char[] original, int from, int to) {
// **char[] original**
return copy;
}
Run Code Online (Sandbox Code Playgroud)
仅凭一点来判断String对立的值是错误的StringBuffer。是的,它们在获取子字符串时的功能非常相似。不,这对是否使用一种或另一种的争论没有贡献。
您应该始终使用最佳结构。String是不可变的,应该在需要不变性和某些边缘情况时使用。如果您需要对 a 进行更改,CharSequence那么使用StringBuilder.
考虑删除字符串的一部分。比较使用 aString和使用 a 的方法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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2746 次 |
| 最近记录: |