java.lang.StringBuffer: thread-safe(之所以是thread-safe的是因为它的所有方法(构造函数除外)都是synchronized的)
java.lang.StringBuilder: not thread-safe, much faster than StringBuffer since no synchronization.
StringBuilder was introduced since JDK1.5 and it provides the same operation as StringBuffer.
AbstractStringBuilder里有个乍看很巧妙细看很愚蠢再仔细推敲很高明的函数 static int stringSizeOfInt(int x) ,该函数返回整形数字x的长度,比如x=5,返回长度1,x=10,返回2,x=999.返回3.请看实现:
final static int [] sizeTable = { 9, 99, 999, 9999, 99999, 999999, 9999999,
99999999, 999999999, Integer.MAX_VALUE };
// Requires positive x
static int stringSizeOfInt(int x) {
for (int i=0; ; i++)
if (x <= sizeTable[i])
return i+1;
}
// Requires positive x
static int stringSizeOfLong(long x) {
long p = 10;
for (int i=1; i<19; i++) {
if (x < p)
return i;
p = 10*p;
}
return 19;
}
为啥不直接用String.valueOf(x).length()呢?(负数的时候,-1即可啊) 猜想:应该是这种算法的效率更高?(看String.valueOf()的实现吧)。
BTW:可以看到JDK的代码里,存在一些看着不是那么优雅和简洁明了的代码,根据这个猜想,有些时候为了获得性能方面的提升,丑陋的代码还是需要的,呵呵。
令一个很好的算法同样位于AbstractStringBuilder,reverse()函数,实现如下(下例去除掉关于utf-16 surrogate的考虑)
public AbstractStringBuilder reverse() {
int n = count - 1;
for (int j = (n-1) >> 1; j >= 0; --j) {
char temp = value[j];
char temp2 = value[n - j];
value[j] = temp2;
value[n - j] = temp;
}
return this;
}
由此可以引伸出reverse(char[]) or reverse(String)等等。。。
注意AbstractStringBuilder虽然是一个abstract,但是只有一个方法是abstract的,就是String toString(). 而StringBuffer和StringBuilder都是exteds AbstractStringBuilder,它俩各个方法的重载基本上都是调用了super.xxxx ,唯一不同的是synchronization以及返回值的不同.
至于String和这俩的区别,没啥好说的,google一大把
分享到:
相关推荐
在Java编程语言中,`java.lang.String`是最重要的类之一,它是所有字符串操作的基础。这个类位于核心类库中,因此无需显式导入即可使用。本文将深入探讨`String`类的一些关键知识点,包括它的特性、构造方法、常用...
11. **构建者模式**: Commons Lang 提供了多种Builder类,如 `StringBuilder` 和 `StringBuffer` 的变体,允许更灵活地构建复杂字符串。 12. **枚举枚举**: `EnumSet` 和 `EnumMap` 类提供了针对枚举类型的集合实现...
6. **使用StringBuffer或StringBuilder代替+操作**:在进行大量字符串连接时,使用这两个类可以避免创建大量中间对象。 了解`java.lang.OutOfMemoryError: Java heap space`错误的原因和解决方案,有助于我们在编写...
在Java编程语言中,`StringBuffer`和`StringBuilder`是两个非常重要的类,它们主要用于处理字符串的拼接和修改操作。这两个类位于`java.lang`包下,因此在使用时无需显式导入。本篇文章将深入探讨这两个类的特性和...
- `java.lang.StringBuilder` 和 `java.lang.StringBuffer`:用于高效构建字符串,线程安全的分别是`StringBuffer`。 - `java.lang.String`:Java中的不可变字符串类,包含大量字符串操作方法。 5. **异常处理...
4. **字符串处理**:`java.lang.String`和`java.lang.StringBuilder/StringBuffer`是处理文本数据的关键类。 5. **日期时间**:`java.time`包在Java 8引入,提供了更强大、更易用的时间日期处理功能。 6. **反射机制...
3. **字符串处理:** `java.lang.StringBuilder` 和 `java.lang.StringBuffer` 提供了在字符串上进行拼接和修改的高效方法,尤其在多线程环境下,`StringBuffer` 是线程安全的选择。`java.util.regex` 包提供了正则...
- `java.lang.StringBuilder#append()`: 字符串构建。 - `java.lang.StringBuffer#append()`: 字符串构建。 - `java.sql.PreparedStatement`: 预编译SQL语句。 - `javax.swing.GroupLayout.Group#addComponent()`: ...
, java.io.InputStream, java.nio.ByteBuffer, java.io.ByteArrayOutputStream)TXT (java.lang.String, char[], java.nio.CharBuffer, java.lang.StringBuffer, java.lang.StringBuilder)支持的数据源:...
- `java.lang.StringBuilder` 和 `java.lang.StringBuffer` 用于高效构建字符串,特别是多线程环境。 - `java.util.regex.Pattern` 和 `java.util.regex.Matcher` 支持正则表达式匹配和操作。 6. **网络工具类**...
Java中的StringBuilder是一个非常重要的类,它位于java.lang包中,被广泛应用于字符串操作中。StringBuilder的主要作用是提供一个可变的字符序列,用以替代不可变的String,以提高性能和效率。当需要频繁修改字符串...
- `java.lang.StringBuilder` 和 `java.lang.StringBuffer`:可变的字符串对象,用于构建和修改字符串,`StringBuffer`在多线程环境下更安全。 3. **集合框架**: - `java.util.ArrayList`, `java.util....
- `java.lang.StringBuilder`和`java.lang.StringBuffer`:用于字符串拼接,`StringBuilder`是非线程安全的,而`StringBuffer`是线程安全的。 5. **Apache Commons Lang**: - Apache Commons Lang是Apache软件...
- `java.lang.StringBuffer#append()`:线程安全的字符串构建器。 - `java.nio.ByteBuffer#put()`:以及其他缓冲区类如`CharBuffer`、`ShortBuffer`等,用于填充缓冲区。 - `javax.swing.GroupLayout.Group#add...
【Java初级教程】Java语言程序设计的第7章主要探讨了Java中的一些常用类,包括`java.lang.String`、`java.lang.StringBuilder`和`java.util.StringTokenizer`。以下是对这些类的详细解释: 1. **`java.lang.String`...
- StringBuffer和StringBuilder:当需要进行频繁的字符串拼接操作时,推荐使用StringBuffer或StringBuilder,因为它们是可变的,从而能够提高性能。 - import语句的使用:Java中的import语句用于引入其他包中的类,...
`StringBuilder`和`StringBuffer`作为可变字符串,它们在多线程环境下提供了线程安全的字符串操作。 `java.util`包中的集合框架是Java编程的重要部分。例如,`ArrayList`和`LinkedList`分别代表动态数组和链表数据...