String结构剖析
String是final 类,不能被其他的类继承
String有属性private final char vaLue[]; 用于存放字符串内容
注意: value 是个final类型, 不可以修改: 即value不能指向新的地址,但是单个字符内容是可以变化
两种创建String对象的区别
方式一:直接赋值String s1 = "hsp";//s1指向常量池的"hsp"
方式二:调用构造器String s2 = new String("hsp");//s2指向堆中对象
图解
这里b.intern()方法最终返回的是常量池的地址(对象)
-
String是一个final类, 代表不可变的字符序列
2)字符串是不可变的。一个字符串对象一旦被分配, 其内容是不可变的.
重要规则,Stringc1 = "ab" + "cd";常量相加,看的是池。Stringc1 = a + b;变量相加,是在堆中
结果=》hsp and hava
String类的常见方法应用实例
后面的最近去网上自己查就行
StringBuffer类
java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删。
很多方法与String相同,但StringBuffer是可变长度的。
StringBuffer是一个容器。
String VS StringBuffer
-
String保存的是字符串常量, 里面的值不能更改,每次String类的更新实际 上就是更改地址,效率较低//private final char value[];
-
StringBuffer保存的是字符串变量,里面的值可以更改,每次 StringBuffer的更新实际上可以更新内容,不用每次更新地址,效率较高
//char[] value; // 这个放在堆
看源码就行
StringBuffer转换
StringBuffer常用方法
append:追加
练习题
看源码
第一题的底层源码在这
StringBuilder类
StringBuilder和StringBuffer均代表可变的字符序列,方法是一样的,所 以使用和StringBuffer一样
1)一个可变的字符序列。此类提供一个 与StringBuffer兼容的API,但不保证同 步(StringBuilder不是线程安全)。该类被设计用作StringBuffer的一个简易 替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类, 因为在大多数实现中,它比StringBuffer要快
2)在StringBuilder上的主要操作是 append和insert 方法,可重载这些方法, 以接受任意类型的数据
看源码就行
一级引用如下:
synchronized:已同步