String用于保存字符串的字符序列

String的关系图

实现了Serializable表明可以串行化,实现了Comparable接口表明两个Sting类对象可以比较。
String类是final类,不能再被继承
String类有属性,private final char value[]; 用于存放字符串内容
value是final类型,不可二次修改,即不能修改指向关系,但是单个字符的内容是可以变化的
创建String对象的方式
直接赋值 String s = "fk";
先从常量池查看是否有"fk" 的数据空间,若有,则直接将s指向该数据空间,无则重新创建然后再指向,最后s指向的是常量池中的空间地址。
调用构造器 String s2 = new String("");
先在堆中创建空间,里面存有value属性,指向了常量池的"fk"空间,若常量池中无''fk''空间。则重新创建,然后通过value指向,即s最终指向堆中的value地址,value又指向常量池中的空间地址。

String类中重写了equals方法,用于判断字符串的值是否相等
intern方法,若常量池已经包含一个等于此String对象的字符串,则返回该常量池的地址(对象),若无,则将此String对象添加到池,并返回地址。
String字符串的特性
String c = "a" +"b"; 常量相加,看常量池
String d = e + f; 变量相加,看堆

String是一个final类,代表不可变的字符序列,有很多常用方法


其中format类似于c语言的printf输出语句

-----------------------------------------------------------
StringBuffer
java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删,其中很多方法与String相同,但StringBuffer是可变长度的,它是一个容器,但他也是一个final类,不能被继承。
StringBuffer的直接父类AbstractBuilder中,有字符数组value[],不是final类型,该数组中存放字符串内容,里面的值可以更改,且不用每次更新地址(相比于String),只有空间不够时候才会更新地址
StringBuffer的构造器

String类型转StringBuffer
String str = "hello";
1:使用构造器 StringBuffer sb = new StringBuffer(str);
2:使用append方法 StringBuffer sb1 = new StringBuffer(); sb1.append(str);
StringBuffer类型转String
StringBuffer sb2 = new StringBuffer("hello");
1:String s = sb2.toString();
2:String s1 = new String(s);
StringBuffer常用方法


StringBuilder也是可变的字符序列,但该类不保证同步,即不是线程安全的,该类被设计用作StringBuffer的一个简单替换,用在字符串缓冲区被单个线程使用时,可以用的话优先采用该类,因为它比StringBuffer更快



被折叠的 条评论
为什么被折叠?



