Java基础,String,StringBuffer, StringBuilder

版权声明:Songcz原创,如有转载请注明出处 https://blog.csdn.net/weixin_43701058/article/details/90106545

这三兄弟,可以说是面试没事就问…
这里我们看看JDK源码从而分析下。
1.String

//JDK源码:
public final class String
private final char value[];

咱们先看看String这个类,final修饰不可重写不可改变(常量),底层是char[],可以看做是char的包装类。
都不可变了,当然线程安全

public class test {
	public static void main(String[] args){
		String a = "123";//创建String对象内容为"123",并赋给引用a
		System.out.print(a);//打印a的引用值
		System.out.println("内存地址:"+System.identityHashCode(a));
		//这里相当于String a = new String("456");
		//即又创建String对象内容为"456",并赋给引用a
		a =  "456";	
		System.out.print(a);//打印a的引用值
		System.out.println("内存地址:"+System.identityHashCode(a));	  
	}     
}

内存图解:在这里插入图片描述
输出结果

123地址值:366712642
456地址值:1829164700

可以看出a的值不一样但是内存地址不一样。
2.StringBuffer与StringBuilder

//StringBuffer,JDK源码:
 public final class StringBuffer
    extends AbstractStringBuilder
 @Override
    public synchronized int length() {
        return count;
    }

StringBuffer相当古老的类JDK1.0就有,内置方法都被synchronized修饰,其线程安全。

//StringBuilder,JDK源码:
public final class StringBuilder
    extends AbstractStringBuilder

StringBuilder是JDK1.5才增加的,线程不安全。
StringBuffer是线程安全的,StringBuilder是线程不安全的
StringBuffer与StringBuilder都继承至AbstractStringBuilder。其内容可以更改。
3.结论
1.String,常量,速度最慢,线程安全
2.StringBuffer,变量,线程安全,适用于多线程下在字符缓冲区进行大量操作的情况。
3.StringBuilder,变量,线程不安全,适用于单线程下在字符缓冲区进行大量操作的情况。

参考:
https://www.cnblogs.com/leskang/p/6110631.html

猜你喜欢

转载自blog.csdn.net/weixin_43701058/article/details/90106545