String
String类是不可变的类,即一旦创建一个String类后,包含在这个对象中的字符序列是不可改变,直至这个对象被销毁。
下面的代码如果觉得没什么问题的话,那么就错了,本来我以为这是正确的,但却并不是的!!!
String demo = "twelvet";
demo = "new twelvet";
// 打印出来的demo为new twelvet,有没有什么问题呢???
System.out.println(demo)
当我们再次给demo赋值时,String类并不是直接重新进行赋值,而是重新生成一个新的实例对象,并在内存中指向“new twelvet”这个字符串,demo则指向最新生成的实例对象,之前的实例仍然是存在的。
StringBuffer
StringBuffer是一个字符序列可变的字符串,当它被创建后,是可以通过所提供的append()、insert()、reverse()、setCharAt()、setLength()等方法去改变原有的字符序列。当你觉得可以了,那么就可以调用它的toString()方法将其转换为一个String对象。
简单看下它的操作
StringBuffer demo = new StringBuffer("hello");
demo.append("twelvet");
// demo打印结果为:hello twelvet
System.out.println(demo.toString());
通过上面的解释和操作,相信也有所了解了吧,它并没有像String那样重新实例一个对象,而是通过提供的方法连接出新的字符串!!!
StringBuilder
最后一个StringBuilder,不用多说,StringBuilder也是一个一个字符序列可变的字符串的类,和StringBuffer相比较其实是差不多的,无论是构造器还是方法!!!不同点就是StringBuffer是线程安全的,而StringBuilder则不是,所以StringBuilder的性能略高。
StringBuffer是如何实现的线程安全
大家可以点进去StringBuffer,可以很清楚的发现synchronized这个关键词,可以和StringBuilder一起去看看,区别就是在这里!!!
实践为真理,胡说都是扯淡,这里还请大家动手去看看了,就不贴出相关“真理“了