(1)String对象用于保存字符串,也就是一组字符序列
(2)字符串常量对象是用双引号括起的字符序列
(3)字符串的字符使用Unicode字符编码,即一个字符(不区分字母还是汉字)占两个字节;
(4)String类是final类,不能被继承;
(5)String字符串内容底层存储使用char数组存储,并且内存地址不可修改,而数组内容可修改;
private final char value[];
(1)父类Object:所有类的基类
(2)接口Serializable:说明String对象可串行化,即该对象可在网络传输
(3)接口Comparable:说明String对象可相互比较大小
(1)直接赋值
String s1 = "taobao";
创建步骤:
内存剖析
(2)调用构造器
String s2 = new String("taobao");
创建步骤
内存剖析
(1)面试题1:以下语句创建了几个对象?画出内存布局图
String s1 = "taobao"; s1 = "jingdng";
创建对象个数:2个
内存剖析图
(2)面试题2:以下语句创建了几个对象?画出内存布局图
String s1 = "taobao"+".com"; // 优化等价于 String s1 = "taobao.com"
(3)面试题3:以下语句创建了几个对象?画出内存布局图
String s1 = "taobao"; String s2 = ".com"; String s3 = s1 + s2; String s4 = "taobao.com"; // s3和s4地址不相等,s3指向堆,s4指向常量池
(4)面试题4:以下语句创建了几个对象?
String s1 = new String("hello") + new String("world");
方法名称 | 方法描述 | 范例 |
---|---|---|
equals | 区分大小写,判断内容是否相等 | |
equalsIgnoreCase | 忽略大小写的判断内容是否相等 | |
length | 获取字符串的长度,即字符个数 | |
indexOf | 获取字符在字符串中第一次出现的索引,索引从0开始,找不到则返回-1 | |
lastindexOf | 获取字符在字符串中最后一次出现的索引,索引从0开始,找不到则返回-1 | |
substring | 截取指定范围的子串 | |
trim | 去前后空格 | |
charAt | 获取某处索引的字符 |
(1)StringBuffer的直接父类:AbstractStringBuilder
(2)SringBuffer实现了Serializable,即StringBuffer的对象可串行化
(3)在父类AbstractStringBuilder有属性char数组不是final修饰,该数组存放字符串类型(真正存放位置在堆中)
char[] value;
(4)StringBuffer是一个final类,不能被继承
(1)直接父类AbstractStringBuilder:
①父类Object:所有子类的基类
②接口Appendable:
③接口CharSequence:
(2)接口Serializable:说明String对象可串行化,即该对象可在网络传输
(1)String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低
private final char value[];
(2)StringBuffer保存的是字符串变量,里面的值可以更改,其更新实际上可以更新内容,不用更新地址,效率较高
char[] value;
(1)StringBuffer创建
// 1、创建一个大小为16的char[],用于存放内容 StringBuffer stringBuffer1 = new StringBuffer(); // 2、创建一个指定char[]大小的stringbuffer StringBuffer stringBuffer2 = new StringBuffer(100); // 3、通过String创造stringbuffer,char[]大小就是str.ength()+16 StringBuffer stringBuffer3 = new StringBuffer("hello");
(2)String和StringBuffer转换
// String-->StringBuffer String str1 = "hello"; // 1、构造器转换 StringBuffer stringBuffer1 = new StringBuffer(str1); // 2、append转换 StringBuffer stringBuffer2 = new StringBuffer(); stringBuffer2.append(str1);
方法名称 | 方法描述 | 范例 |
---|---|---|
append | 在后面增加字符串 | |
delete | 删除索引从start到end的字符串 | |
replace | 替换指定字符串 | |
indexOf | 查找指定字串在字符串中第一次出现索引位置,没有则返回-1 | |
insert | 在指定索引位置插入字符串 | |
length | 获取长度 |
(1)一个可变的字符序列
(2)应用场景:用在字符串缓冲区被单个线程使用的时候
(3)主要方法:append、insert
(1)String:不可变字符序列,效率低,但是复用率高
(2)StringBuffer:可变字符序列、效率较高、线程安全
(3)StringBuilder:可变字符序列、效率最高、线程不安全