String和StringBuilder StringBuff的区别?

1、String

String是不可变的,因为它在源码中是被final修饰的。

String a='a';

String b='b';

String c= a+b;

首先String a在jvm中会生成一个内存地址,String b 也会生成一个内存地址,String c 又会生成一个内存地址。

如果这样,我们得到“ab”这个字符串,因为String底层未不可变的字符串,所以会创建三个对象,都会占用内存,而这三个对象一直都未失去引用,所以jvm无法垃圾回收,造成内存资源的大量浪费,这在我们开发中是不推崇的,而StringBuilder 与StringBuffer则不存在这样的问题。

2、StringBuilder和StringBuff

StringBuilder 与StringBuffer都继承自AbstractStringBuilder,该类的char数组并没有用final修饰,内容是可变的。

StringBuilder的效率是比StringBuffer高的,StringBuilder未使用同步锁,所以效率提高

通过源码可以知道,StringBuffer在拼接字符串时,使用了同步锁(synchronized),所以安全性提高,

synchronized的锁是this锁,就是用当前类来当锁

发布了38 篇原创文章 · 获赞 1 · 访问量 2817

猜你喜欢

转载自blog.csdn.net/qq_31741189/article/details/100936546