String、StringBuffer和StringBuilde

作者: 奔跑吧李博 | 来源:发表于2018-12-30 23:09 被阅读31次

String内部都是用final修饰,不能做改变。

/** The value is used for character storage. */
private final char value[];
/** The offset is the first index of the storage that is used. */
private final int offset;
/** The count is the number of characters in the String. */
private final int count.
String为什么要设计成final

1.线程安全
2.支持字符串常量池数据共享,节省资源,提高效率(因为如果已经存在这个常量便不会再创建,直接拿来用)
主要是为了保证安全。如果字符串是可变的,数据库的用户名、密码都是以字符串的形式传入来获得数据库的连接,很可能被篡改。还有保证了线程安全。

什么叫不可改变?

就是这个值一旦在常量池被创建,是无法修改的,即便你在后面拼接一些其他字符,也会把新生成的字符串存到另外一个地址了。
String是不可变的对象, 因此在每次对String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,性能就会降低。除非用反射招到string的value[]属性值进行改变。

三者区别总结:

StringBuffer和StringBuilder的一个区别是,StringBuffer在append方法前增加了一个synchronized修饰符,以起到同步的作用,为此也降低了执行效率;使用 StringBuffer和StringBuilder 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用.
基本原则:如果要操作少量的数据,用String ;单线程操作大量数据,用StringBuilder ;多线程操作大量数据,用StringBuffer。

相关文章

网友评论

    本文标题:String、StringBuffer和StringBuilde

    本文链接:https://www.haomeiwen.com/subject/mjsgaftx.html