谈一谈对String的理解

谈一谈对String的理解
java.lang包
final修饰不可变
底层是char类型的数组
引用数据类型,因为大量的使用,被设计成可以直接赋值
堆中存储实例
字符串常量池存储引用,
JAVA规定,你不可以直接改变常量池String 对象的值,因为你一旦在常量池创建了值为 “abc” 的String 类型的对象,那么以后所有值是"abc"的String 类型,都会指向常量池里面的这个对象。
(1)如果要操作少量的数据用 String;
(2)多线程操作字符串缓冲区下操作大量数据 StringBuffer;
(3)单线程操作字符串缓冲区下操作大量数据 StringBuilder。
JVM为了提高性能和减少内存开销,在实例化字符串常量的时候进行了一些优化
• 为字符串开辟一个字符串常量池,类似于缓存区
• 创建字符串常量时,首先检查字符串常量池是否存在该字符串
• 存在该字符串,返回引用实例,不存在,实例化该字符串并放入池中
String c = "xx" + "yy " + a + "zz" + "mm" + b; 实质上的实现过程是: String c = new StringBuilder("xxyy ").append(a).append("zz").append("mm").append(b).toString();
底层通过 StringBuilder实现

posted @ 2021-10-13 20:46  www小汪  阅读(84)  评论(0)    收藏  举报