String:
1. String是对象,但是不是原始类型。
2. String为不可变对象,一旦被创建,就不能修改他的值了。
3. 对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去。
4. String是final类,不能被继承。
StringBuffer:
1. StringBuffer是一个可变的对象,对它进行修改的时候,不会像String那样重新创建对象。
2. StringBuffer只能通过构造函数来创建。
3. StringBuffer对象创建后,在内存中就会分配内存空间,并初始保存一个Null。向StringBuffer中赋值时,可以通过它的append方法。
4. StringBuffer是线程安全的。
StringBuilder:
1. StringBuilder与StringBuffer功能类似,但是它是非线程安全的。
2. StringBuilder是JDK1.5时引入的,为StringBuffer补充了一个单个线程使用的等价类,即 StringBuilder。与StringBuffer相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
下面我们来看个小例子就一清二楚了,
eg1. String
执行过程: String a = "A";这条语句首先在内存中分配一个地址空间,空间大小为1。然后执行a += "B",该过程是连接字符串过程, "A"和"B"在内存中重新分配地址, 然后将a的内存地址指向"AB"的内存地址。
eg2. StringBuilder
执行过程: StringBuilder不会再次分配内存空间。处理效率比String高的多。
1. String是对象,但是不是原始类型。
2. String为不可变对象,一旦被创建,就不能修改他的值了。
3. 对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去。
4. String是final类,不能被继承。
StringBuffer:
1. StringBuffer是一个可变的对象,对它进行修改的时候,不会像String那样重新创建对象。
2. StringBuffer只能通过构造函数来创建。
3. StringBuffer对象创建后,在内存中就会分配内存空间,并初始保存一个Null。向StringBuffer中赋值时,可以通过它的append方法。
4. StringBuffer是线程安全的。
StringBuilder:
1. StringBuilder与StringBuffer功能类似,但是它是非线程安全的。
2. StringBuilder是JDK1.5时引入的,为StringBuffer补充了一个单个线程使用的等价类,即 StringBuilder。与StringBuffer相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
下面我们来看个小例子就一清二楚了,
eg1. String
String a= "A";
a += "B";
执行过程: String a = "A";这条语句首先在内存中分配一个地址空间,空间大小为1。然后执行a += "B",该过程是连接字符串过程, "A"和"B"在内存中重新分配地址, 然后将a的内存地址指向"AB"的内存地址。
eg2. StringBuilder
StringBuilder sb = new StringBuilder("A");
sb.append("B");
执行过程: StringBuilder不会再次分配内存空间。处理效率比String高的多。