20201224-魏凯
2020.12.24
1.String
1.1
String s = “hello”;
(1)当遇到“hello”会首先查找String常量池中是否存在相应的String实例
(2)若String常量池【不存在】相应的String实例,则构造新的实例并将该实例添加到String常量池
(3)将返回的String实例的地址赋值给s变量(此时就是s变量指向了String变量池)
1.2
String x = "hello" ;
(1)当遇到“hello”会首先查找String常量池中是否存在相应的String实例
(2)若String常量池【存在】相应的String实例,则直接返回String常量池中该实例的地址
(3)将返回的String实例的地址赋值给x变量(此时就是x变量指向了String常量池)
1.3
String x = s.intern();
- 调用s的intern方法时,String常量池中并没有相应String实例
- 所以将当前的String实例添加到String常量池并返回该实例的地址
(情况2:①调用s的intern方法时,String常量池中已经存在相应String实例
②因此s.intern()返回了String常量池中已经存在的String实例的地址,而不是返回s的实例地址)
1.4
String t = "青海长云暗雪山" ;
- 尝试从String常量池中获取字符序列对应的String实例
- 因为String常量池中已经存在相应的String实例,所以直接返回相应的String实例(情况2:因为未找到相应的String实例,所以需要创建新的String实例并添加到String常量池后再返回其地址)
2.StringBuffer
(1)StringBuffer类直接继承了AbstractStringBuffer【从JDK1.5开始】
(2)StringBuffer类是最终类【final class】
(3)StringBuffer实例中的实例变量是可变的
(4)StringBuffer类中定义的实例方法都会直接修改当前StringBuffer实例
(5)StringBuffer实例是可变的(字符缓冲区中的内容是可变的)
(6)常见的实例方法:deleteCharAt/setCharAt/trimToSize
(7)StringBuffer和StringBuilder都没有重写Object的equals方法
(8)可以将StringBuffer和StringBuilder转换为String实例后通过String类提供的contentEquals来比较
(9)String类提供了contentEquals(CharSequence)和contentEquals(StringBuffer)方法用来比较字符序列的内容是否相等
近期评论