● 请你说明String 和StringBuffer的区别
String 提供了设置不可改变的字符串
StringBuffer类,StringBuilder 支持字符串进行修改
String类 String字符串常量
String值的修改每次都会导致开辟新的内存空间 效率低,内存消耗大
String执行慢的原因
String str = "abc"; System.out.println(str) String str = str + "de" System.out.println(str)
首先创建一个str对象,并将“abc”赋值给str,在第三行中JVM又创建了新的对象str,把原来的str和“de”相加赋值给新的对象str,原来的str对象呗JVM的垃圾回收机制(GC)回收,所以java中对String对象进行的操作实际尚是不断创建新的对象并且将旧的对象回收的过程,因此执行速度很慢
附String源码 String任何对字符串操作都是创建一个新的字符串
StringBuiler和 StringBuffer字符串变量
能够对字符串进行修改并不开辟新的内存
StringBuilder 速度块,但不是线程安全的
StirngBuffer 速度慢,但是线程安全
StringBuffer和StringBuilder是变量,对变量进行操作就是直接对对象进行更改,而没有了对象的创建和回收的过程,因此速度很快
StringBuilder sb = new StringBuilder().append("abd").append("abc"); System.out.println(StringBuilder.toString);