String,StringBuffer,StringBuilder类异同辨析
框架
String对象的建立方法及底层
- 通过如下代码展示两种建立方法
package com.immunize.review;
/**
* String对象的建立方法及底层
*
* @author Mr IMMUNIZE
*
*/
public class StringTest {
public static void main(String[] args) {
// 第一种创建方法
String s1 = "immunize";
System.out.println(s1);
// 第一种创建方法
String s2 = new String("immunize");
System.out.println(s2);
System.out.println(s1 == s2);// false
System.out.println(s1.equals(s2));// true
}
}
执行结果如图:
-
底层实现简单说明
底层,如果直接使用第一种方法创建String类,则java会在常量池中建立"immunize"这个量,而如果是第二种创建方法,他会先在堆内存中开辟新的内存空间,存放这个"immunize"。具体的原因可参照上图代码结果。 -
因此如果比较两个字符串的内容是否相同,建议使用equals方法。
StringBuffer与String的区别
- StringBuffer底层实现是一个char数组,并且默认长度为16
- StringBuffer的3种构造方法辨析
package com.immunize.review;
/**
* StringBuffer的3种构造方法异同
*
* @author Mr IMMUNIZE
*
*/
public class StringBufferTest {
public static void main(String[] args) {
// 01
StringBuffer s1 = new StringBuffer();
System.out.println(s1.capacity());// 16
// 02
StringBuffer s2 = new StringBuffer(100);
System.out.println(s2.capacity());// 100
// 03
StringBuffer s3 = new StringBuffer("immunize");
System.out.println(s3.capacity());// 16+8=24
}
}
StringBuilder与StringBuffer区别
- 底层实现完全相同
- StringBuffer是jdk1.0版本加入的,线程安全但是效率低
- StringBuilder是jdk1.5版本加入的,线程不安全但是效率高。