String / String buffer / String builder 原理

String / String buffer / String builder 原理

String 内部结构

public final class String {
	private final char value[];
    private int hash; // Default to 0
}

String buffer 与String builder 都继承了AbstractStringBuilder 内部方法基本都是一样的但是。String

多线程

  • String buffer 是线程安全的 好多方法都添加的synchronized。
@Override
public synchronized StringBuffer append(String str) {
    toStringCache = null;
    super.append(str);
    return this;
}

  • Stringbuilder 是线程不安全的
@Override
public StringBuilder append(String str) {
    super.append(str);
    return this;
}

String 长度是不可变的

  • String 在进行subString replace 操作的时候都会。new 一个String
  • String 在进行 + 操作的时候jvm 会 通过new StringBuilder 来进行操作

存储

    String s1 = new String("123");

先去看String常量池里面有没有"123" 有的话直接 在堆内存中new Stirng(“1234”)
否则 现在常量池里面增加 “123” 然后再在堆内存中new Stirng(“1234”)
String a = new String(“1234”);// 先判断string pool 里面有没有,没有的话先添加到string pool中,由于有new 操作所以会在堆内存中再存一份。创建2个对象/如果string pool 中存在则只需进行后面的步骤。 创建1个对象。

String b = a.intern();  // 指向String pool 里面的对象 “1234”。		 创建0个对象
String c = "1234";		// 直接指向 string pool 里面的 “1234”。     创建0个对象
System.out.println(a == b);  // false
System.out.println(c == b);	 // true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值