JAVA 中 String 类与 StringBuffer 类的区别
这里有新鲜出炉的 Java 函数式编程, 程序狗速度看过来!
Java 程序设计语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
这篇文章主要为大家详细介绍了 JAVA 中 String 类与 StringBuffer 类的区别, 具有一定的参考价值, 感兴趣的小伙伴们可以参考一下
在 Java 中有两种字符串的操作: String 类和 StringBuffer 类(缓冲字符串处理类)
下面先简单的说一下两者的区别
String 类和 StringBuffer 类都提供了相应的方法实现字符串的操作, 但二者略有不同
(1) String 类
该类一旦产生一个字符串, 其对象就不可变 String 类的内容和长度是固定的如果程序需要获得字符串的信息需要调用系统提供的各种字符串操作方法实现虽然通过各种系统方法可以对字符串施加操作, 但这并不改变对象实例本身, 而是生成一个新的实例系统为 String 类对象分配内存, 是按照对象所包含的实际字符数分配的
(2) StringBuffer 类
查了查 Buffer 这个词, 有缓冲的意思, 这个类肯定有缓冲的功能该类处理可变的字符串如果要修改一个 StringBuffer 类的字符串, 不需要再创建新的字符串对象, 而是直接操作原来的串该类的各种字符串操作方法与 String 类提供的方法不相同系统为 StringBuffer 类分配内存时, 除去当前字符所占的空间外, 还提供另外的 16 个字符大小的缓冲区每个 StringBuffer 对象都有一定的缓冲区容量, 当字符串大小没有超过容量时, 不会分配新的容量, 当字符串大小超过容量时, 会自动增加容量
下面来举一些具体的实例
字符串的连接
String 类有两种方法
第一种(+)
- public class str {
- public static void main(String[] args) {
- String str1 = "加特效!";
- String str2 = "Duang~~";
- System.out.println(str1 + " " + str2);
- }
- }
第二种(concat)
- public class str {
- public static void main(String[] args) {
- String str1 = "加特效!";
- String str2 = "Duang~~";
- System.out.println(str1.concat(str2));
- }
- }
StringBuffer 类的方法
- public class str {
- public static void main(String[] args) {
- // 构建一个缓冲字符串的对象 sb
- StringBuffer sb = new StringBuffer("加特效!");
- // 通过 append 方法, 在这个对象后面添加一个新字符串
- sb.append("Duang~~");
- System.out.println(sb);
- }
- }
最终输出的结果都为: 加特效! Duang~~
通过上面的例子不难看出, String 类在进行扩展的时候, 需要实例两个对象, 每个对象都会占用一定的内存, 而 StringBuffer 类就不需要再实例化一个新的类, 只需要调用一个扩展的方法就可以了
还有一点 StringBuffer 类的内存容量是可扩展的举个具体的例子:
- public class str {
- public static void main(String[] args) {
- // 声明字符串对象 sb
- StringBuffer sb = new StringBuffer(40);
- System.out.println(sb.capacity()); // 输出字符串的容量 capacity
- sb.ensureCapacity(100); // 扩充容量
- System.out.println(sb.capacity()); // 输出字符串的容量 capacity
- }
- }
capacity()方法代表了字符串对象在内存中, 可以容纳字符串的个数如果想要扩充内存容量, 可以使用方法 ensureCapacity()
来源: http://www.phperz.com/article/18/0206/359019.html