1
、什么是
StringBuffer
从开发角度来看,在实际的操作中经常会出现字符串内容循环修改的情况,但是如果此时直接使用
String
做,则代码性能会非常的低,因为
String
的内容不可改变。
所以在
java
中提供了一个可以修改的字符串类,此类称为
StringBuffer
。
在
String
中使用“
+
”号完成字符串的连接操作,那么在
StringBuffer
类中使用
append()
方法完成字符串的连接操作,StringBuffer
类定义在
java.lang
包中。
2、
String
和
StringBuffer
的区别
StringBuffer
类和
String
一样,也用来代表字符串,只是由于
StringBuffer
的内部实现方式和
String
不同,所以
StringBuffer
在进行字符串处理时,不生成新的对象,在内存使用上要优于
String
类
。
所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用
StringBuffer
要更加适合一些
。
在
StringBuffer
类中存在很多和
String
类一样的方法,这些方法在功能上和
String
类中的功能是完全一样的。但是有一个最显著的区别在于,对于
StringBuffer
对象的每次修改都会改变对象自身,这点是和
String
类最大的区别。
另外由于
StringBuffer
是线程安全的,所以在多线程程序中也可以很方便的进行使用,但是程序的执行效率相对来说就要稍微慢一些。
在java中有3个类来负责字符的操作:
1.Character 是进行单个字符操作的,
2.String 对一串字符进行操作。不可变类。
3.StringBuffer 也是对一串字符进行操作,但是可变类
。
String:
是对象不是原始类型.
为不可变对象,一旦被创建,就不能修改它的值.
对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承.
StringBuffer:
是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立,
StringBuffer sb = new StringBuffer();
ps:不能通过付值符号对他进行付值.
sb = "welcome to here!";//!!这样子是错误的
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer
中付值的时候可以通过它的append方法.
sb.append("hello");
字符串连接操作中StringBuffer的效率要比String高:
String str = new String("welcome to ");
str += "here";
的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后
再将StringBuffer toSting();
这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.
并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.
这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的
.
根据上面所说:
str += "here";
的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后
再将StringBuffer toSting();
所以str += "here";可以等同于
StringBuffer sb = new StringBuffer(str);
sb.append("here");
str = sb.toString();
总结
:
如果在程序中需要对字符串进行频繁的修改连接操作的话
.
使用
StringBuffer
性能会更高
3
、
StringBuffer
的操作实例
3.1
、字符串连接
append()
public class StringBufferDemo01 {
public static void main(String[] args) {
StringBuffer buf = new StringBuffer();
buf.append("hello"); // 添加字符串
buf.append("world").append("!!!\n").append("JAVA"); // 字符串连接
System.out.println(buf) ;
String str = buf.toString();// 将StringBuffer变为String
System.out.println(str);
}
}
3.2
、字符串替换操作
replace()
public class StringBufferDemo03 {
public static void main(String[] args) {
StringBuffer buf = new StringBuffer();
buf.append("hello"); // 添加字符串
buf.append("world").append("!!!").append("JAVA"); // 字符串连接
buf.replace(0, 5, "lixinghua") ;
System.out.println(buf) ;
}
}
3.3
、字符串反转操作
reverse()
public class StringBufferDemo04 {
public static void main(String[] args) {
StringBuffer buf = new StringBuffer();
buf.append("hello"); // 添加字符串
buf.append("world").append("!!!").append("JAVA"); // 字符串连接
buf.reverse();// 字符串反转
System.out.println(buf);
}
}
3.4
、字符串增加操作
insert()
public class StringBufferDemo05 {
public static void main(String[] args) {
StringBuffer buf = new StringBuffer();
buf.append("world").append("!!!").append("JAVA"); // 字符串连接
buf.insert(0, "hello ").insert(5, "~~~") ;
System.out.println(buf);
}
}
3.5
、字符串截取操作
substring()
public class StringBufferDemo06 {
public static void main(String[] args) {
StringBuffer buf = new StringBuffer();
buf.append("world").append("!!!").append("JAVA"); // 字符串连接
buf.insert(0, "hello ").insert(5, "~~~") ;
System.out.println(buf.substring(10));
System.out.println(buf.substring(0,14));
}
}
总结:当你需要用字符串来处理大量数据的时候,一定要记得用StringBuffer而不是String,反之,两者均可用。
在Java中,有好多的对象彼此间像String和StringBuffer
一样很相似,在很多情况下两者所应用的效果也是非常类似没差别,只有在一些特殊的情况下,比如大量数据处理、高并发线程等等情况下,两者间的区别才非常明显地显现出来,这就是我们要在程序编写中尽量要意识到的问题。
参考博文:http://www.zihou.me/html/2011/01/27/2726.html
http://www.cnblogs.com/springcsc/archive/2009/12/03/1616330.html
http://wenku.baidu.com/view/7bdbd7651ed9ad51f01df2f4.html
http://www.moandroid.com/?p=1624
引申:java到底是按值传递还是按引用传递?
http://topic.csdn.net/t/20060605/13/4801113.html
java到底是按值传递还是按引用传递?
分享到:
相关推荐
在Java编程语言中,String、StringBuilder和StringBuffer都是用来处理字符串的类,它们之间存在一些重要的区别,主要涉及到性能和线程安全性。 首先,`String`类代表的是字符串常量,一旦创建,其内容就不能改变。...
String, StringBuffer 与 StringBuilder 的区别 在 Java 中,String, StringBuffer 和 StringBuilder 三个类都是用于字符操作的,但它们之间有着很大的区别。 首先,String 是不可变类,意味着一旦创建了 String ...
"String StringBuffer和StringBuilder区别之源码解析" 在Java中,字符串是我们经常使用的数据类型,而String、StringBuffer和StringBuilder是Java中三种常用的字符串类。在这篇文章中,我们将从源码角度对String、...
### StringBuffer 类的总结 #### 一、StringBuffer 类概述 `StringBuffer` 是 Java 中一个非常重要的类,它被设计用于处理字符串数据时提供高效的支持。相比于 `String` 类,`StringBuffer` 提供了更好的性能表现...
在Java编程语言中,`StringBuffer`类是一个非常重要的工具,尤其在处理字符串连接操作时。相较于`String`类,`StringBuffer`提供了线程安全的动态字符串构建,避免了频繁创建新对象带来的性能开销。本文将深入探讨`...
### String与StringBuffer知识点详解 #### 一、String与StringBuffer基本概念 **String**:在Java中,`String`类表示不可变的字符序列,它是最常用的字符串类。一旦创建了一个`String`对象,其内容便无法改变。这...
在Java编程语言中,`String`、`StringBuffer`和`StringBuilder`是处理字符串的三个重要类,它们各自有特定的使用场景和优缺点。理解它们的差异对于编写高效的代码至关重要。 **String类** `String`是不可变的类,...
根据给定的信息,本文将对`String`与`StringBuffer`在Java中的使用进行详细的解析与对比,并结合实例深入分析二者的异同及其适用场景。 ### `String` 和 `StringBuffer` 的基本概念 #### `String` 在Java中,`...
### StringBuffer与String的区别详解 #### 一、概念与特性 **String** 是 Java 中一个不可变的类,代表了字符序列。一旦一个 String 对象被创建后,其内容就不能被改变。这使得 String 类非常适合用来表示常量或者...
在Java编程语言中,`StringBuffer`类是一个非常重要的工具,尤其在处理字符串连接操作时。与`String`类不同,`StringBuffer`是可变的(mutable),这意味着它的内容可以在创建后进行修改,而无需创建新的对象。这种...
在Java编程语言中,`String`和`StringBuffer`都是用来表示和操作字符串的重要类,但它们在性能和使用场景上有显著的区别。 首先,`String`类是不可变的,这意味着一旦创建了一个`String`对象,它的内容就不能改变。...
String、StringBuffer 和 StringBuilder 是 Java 语言中三种不同类型的字符串处理方式,它们之间存在着明显的性能和线程安全性差异。 String String 类型是不可变的对象,每次对 String 对象进行改变时都会生成一...
Java 高级特性 StringBuffer 类 Java 高级特性中,StringBuffer 类是一个非常重要的类,它和 String 类一样用来代表字符串,但是由于内部实现方式的不同,StringBuffer 在进行字符串处理时,不生成新的对象,在内存...
字符串在Java中的表现形式主要有两种:`String`和`StringBuffer`(或者`StringBuilder`)。它们之间的主要区别在于可变性、性能和使用场景。 1. **不可变性**: `String`类是不可变的,这意味着一旦创建了一个`...
在Java编程语言中,`String`和`StringBuffer`都是用来表示和操作字符串的重要类,但它们在使用场景和性能上有显著的区别。了解这些差异对于编写高效、优化的代码至关重要。 首先,`String`类是不可变的。这意味着...
在Java中,处理字符串主要涉及到两个类:String和StringBuffer。这两个类虽然在功能上有许多相似之处,但它们在实现和性能上却有很大的差别。 首先我们来理解String。String类在Java中是不可变的,这意味着一旦一个...
在Java编程语言中,`String`、`StringBuffer`和`StringBuilder`都是用来处理字符串的类,但它们之间存在显著的差异,主要体现在性能、线程安全性和使用场景上。 首先,`String`是最基本的字符串类,它代表的是不可...