认识String类
1. 创建字符串
// 方式一
String str = "Hello Bit";
// 方式二
String str2 = new String("Hello Bit");
// 方式三
char[] array = {'a', 'b', 'c'};
String str3 = new String(array);
2. 字符串比较相等
所有引用数据类型在比较是否相等时, 使用equals方法比较, JDK常用类, 都已经覆写了equles方法, 直接使用.
- 引用数据类型使用
==
比较的仍然是数值(地址是否相等). - 不区分大小写的比较
equalsIgnoreCase();
3. 字符串的常量池
当使用直接赋值法产生字符串对象时, JVM会维护一个字符串的常量池, 若该对象在堆中还不存在, 则产生一个新的字符串对象加入字符串常量池.
当继续使用直接赋值法产生字符串对象时, JVM发现该引用指向的内容在常量池中已经存在, 则此时不再新建字符串对象, 而是复用已有对象
- 直接赋值(使用String类就采用这个方法)
String str1 = "hello" ; String str2 = "hello" ; String str3 = "hello" ; System.out.println(str1 == str2); // true
- 采用构造方法
String str = new String("hello");
- 手工入池: String类提供的intern方法- 调用intern方法会将当前字符串引用指向的对象保存到字符串常量池中
- 若当前常量池中已经存在了该对象, 则不再产生新对象, 返回常量池中的string对象
- 若当前常量池中不存在该对象, 则将该对象入池, 返回入池后的地址
4. 字符串不可变性
所谓的字符串不可变指的是字符串对象的内容不能变, 而不是字符串引用不能变.
如何修改字符串的内容
- 在运行时通过反射破坏value数组的封装(反射是所有框架的基础)
- 更换使用StringBuilder或者StringBuffer类 - 已经不是一个类型了
- 若需要频繁进行字符串的拼接, 使用StringBuilder类的append方法
5. 字符串的其它常见操作
-
字符串比较
-
字符和字符串的相互转换
- 字符串的内部实际上就是使用字符数组来储存
- 通过构造方法
- 部分数组转为字符串
- 取出字符串中指定索引的字符
- 将字符串转为字符数组返回
-
字符串和字节byte的相互转换
-
字符串的查找(重要:1, 6, 8)
-
字符串替换
-
字符串拆分
-
字符串截取
-
其它常用方法
StringBuffer 和 StringBuilder
由于String的不可更改特性,为了方便字符串的修改,提供StringBuffer和 StringBuilder类.这两个都是独立地类.
String和StringBuffer类不能直接转换。如果要想互相转换,可以采用如下原则:
- String变为StringBuffer:利用StringBuffer的构造方法或append()方法
- StringBuffer变为String:调用toString()方法。
- StringBuilder的方法
- 字符串反转:
x.reverse();
- 删除指定范围数据:
x.delete(int start, int end);
- 插入操作:
insert(int start, 数据类型);
- 字符串反转:
String, StringBuffer 和 StringBuilder的区别
- String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.
- StringBuffer与StringBuilder大部分功能是相似的
- StringBuffer采用同步处理,属于线程安全操作, 性能较差;而StringBuilder未采用同步处理,属于线程不安全操作, 性能较高.