目录
1.创建字符串的四种方式
2.字符串比较相等
3.关于字符串的常量问题
3.1手工入池方法
4.字符串的不可变性
5.如何修改字符串的内容
5.1更换使用StringBuilder或这StringBuffer类----已经和String不是一个类了!
5.1.1字符串反转操作,sb提供的revese();
5.1.2删除指定范围的数据 (左闭右开)
5.1.3插入操作
5.2在运行时通过反射破坏value数组的封装(不推荐!)
1.创建字符串的四种方式
(方式一和方式四较为常用!)
注意事项:“hello”这样的字符串字面量常量,类型也是String。
String也是引用类型 ,String str = "hello world";字符串字面量,也是字符串对象
String str2 = str;这两行代码内存布局如下:
再来看这个例子:
2.字符串比较相等
所有引用数据类型在比较是否相等时,使用equals方法比较,JDK常用类,都已经覆写了equals方法,可以直接使用。
若对引用数据类型使用“==”比较的仍然是数值(地址是否相等)
3.关于字符串的常量问题
先来看这两个例子:
当使用直接赋值法产生字符串对象时,JVM会维护一个字符串的常量池,若该对象在堆中还不存在,那么就会产生一个新的字符串对象加入到字符串的常量池中。
当继续使用直接赋值法产生字符串对象时,JVM发现该引用指向的内容在常量池中已经存在了,则此时不再新建字符串对象,而是复用已有对象。
而所谓的“池”:
3.1手工入池方法
String类提供的intern方法
1.若当前常量池中已经存在了该对象,则不再产生新的对象,返回常量池中的String对象。(调用intern方法会将当前字符串引用指向的对象保存到字符串常量池中)
2.若当前常量池中不存在该对象,则将该对象入池,返回入池后的地址。
4.字符串的不可变性
所谓的字符串不可变指的是字符串对象的内容不能变,而不是字符串引用不能变。
为何字符串的对象无法修改内容呢?
字符串其实就是一个字符数组->char[],字符串保存的值实际上在数组中保存。
5.如何修改字符串的内容
5.1更换使用StringBuilder或这StringBuffer类----已经和String不是一个类了!
(StringBuffer和StringBuilder用法完全一样,线程安全,性能较差)
5.1.1字符串反转操作,sb提供的revese();
5.1.2删除指定范围的数据 (左闭右开)
5.1.3插入操作
注意:
5.2在运行时通过反射破坏value数组的封装(不推荐!)
注意:



