stringbuilder 原理
在Java中有String Stringbuilder Stringbuffer,但是 stringbuilder 时运行最快的一个
速度 Stringbuilder > Stringbuffer > String,
但是StringBuffer synchronized 关键字进行修饰,所以是时线程安全的,而Stringbuilder时不安全的,但由于Stringbuilder没有没有加锁进行判断,所以单线程是效率最高的,而String严格意义上来说,其实是一个常量,因为它不能改变,所以它和前两个有较大的差别,因为StringBuilder和StringBuffer是对象可变的,它们两个都继承AbstractStringBuilder类。Stringbuilder与Stringbuffer方法基本上是一样的,只是Stringbuffer加了锁了,而Stringbuilder,所以他是最快的
String str = "a";
str = "b";
在执行这条语句时目标不是str改变了,而是重新引用了,而之前的"a", 就被放弃了,所以需要被回收,然后重新引用,所以String在速度是最慢的
三者的equals方法
在Java里面,只有String重写了equals方法,有人就意味着,当两个字符串比较是否相等时,只有String才能利用equals比较,而StringBuffer与StringBuilder没有重写,所以只是继承了Object类的equals方法,以下是Object的关于equals的源码
public boolean equals(Object obj) {
return (this == obj);
}
我们可以看到,只是单纯的利用了 “==” 来判断,所以当需要判断两个StringBuffer或者两个StringBuilder字符串是否相等时,就不能利用equals了
但是这个时候我们可以利用StringBuffer或者StringBuilder的 toString() 方法,将他们置换为String 然后再利用equals比较是否相等了