String,Stringbuilder,Stringbuffer的区别,进来看看源码怎么说的

String,Stringbuilder,Stringbuffer的区别?
– 如果你答string维护的是字符串常量,Stringbuilder,Stringbuffer适合频繁修改字符串的情况,且Stringbuffer线程安全。
这么回答也OK,但是再问你一句为什么?? 怕是就懵逼了,网上搜的答案呀, 也没细品过为什么啊!为什么要问我为什么!

我知道你们懒,这么帮你查一下源码看看为什么。

1. String:

在这里插入图片描述在这里插入图片描述
   String中维护了一个final的字符数组,用来存储字符串值,且不能修改。构造器也是将char数组和hash进行赋值。所以每次new字符串或者追加字符串的时候,就会在常量池中维护一个新的final数组。

2. Stringbuilder,Stringbuffer

在这里插入图片描述   Stringbuilder,Stringbuffer的源码,都是继承了AbstractStringBuilder抽象类的, 其中维护了一个char数组和数组长度count。 这个char数组是可以修改的, 所以每次append的时候,就会来修改char数组, 最后调用toString()方法时,将char数组转为String。
在这里插入图片描述

总结:
String:底层维护了一个final的char数组,赋值后就不能修改。 所以每次追加字符串会重新维护一个新的final的char数组。
Stringbuilder,Stringbuffer:都继承了AbstractStringBuilder抽象类,其中维护了一个char数组和数组长度count。 这个char数组是可以修改的,每次追加字符串时,可以修改char数组,不用新创建一个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值