Java基础,String,StringBuffer, StringBuilder

这三兄弟,可以说是面试没事就问…
这里我们看看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,变量,线程不安全,适用于单线程下在字符缓冲区进行大量操作的情况。
4.在需要对字符串做操作的情况下,如果没有线程安全问题推荐用StringBuilder。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值