文章目录
一、String的使用
二、 String、StingBuffer、StringBuilder三者异同
一、String的使用
- 1、String声明为final的,不可继承
- 2、String实现了Serializable接口:表示字符串是支持序列化的
实现了Comparalbe接口:表示String可以比较大小 - 3、String内部定义了final char[] value 用于存储字符串数据
- 4、String:不可变的字符序列
- 5、字面量的方式赋值,声明在字符串常量池中
String的实例化方式:
- 方式一:字面量定义
- 方式二:new+构造器
提问:String s = new String("abc");方式创建对象,在内存中创建了几个对象?
- 两个:一个是堆空间中new结构,另一个是char[]对应常量池中的数据“abc”;
String 与 char[]之间的转换
- String -->char[] : 调用String的toCharArray()
- char[ ] -->String : 调用String的构造器
String 与 byte[]之间的转换
- 编码:String -->byte[]:调用String的getBytes()
- 解码:byte[] -->String:调用String的构造器
字符串--->字节(字符集必须一致)
- 1、常量与常量的拼接结果在常量池、
- 2、只要其中一个是变量,结果就在堆中
- 3、拼接结果调用intern()方法,返回值在常量池中
二、String、StingBuffer、StringBuilder三者异同
- String:不可变,底层用char[ ]存储
- StringBuffer:可变,线程安全,效率低初始容量为16的缓冲区,底层用char[ ]存储
- StringBuilder:可变,jdk5新增的,线程不安全,效率高,底层用char[ ]存储
总结:
- 增:append(XXX)
- 删:delete(int start,int end)
- 改:setCharAt(int n,char ch)/replace(int start,int end,String str)
- 查:charAt(int n)
- 插:insert(int offset,XXX)
- 长度:Length();
- 遍历:for()+charAt()/toString()