一:常量池:
属于方法区的一部分,专门用于存放常量值。
- 作用:避免重复创建相同的对象,从而可以节约内存提高效率。
- 字符串常量池:专门用于存放字符串常量值。- 这样可以避免重复创建相同的字符串对象。
二:字符串:
- String:不可变字符串,因为String字符串中存放字符的char字符数组是final修饰的常量。String存放的字符内容不可 修改,对应字符串的操作,都是生成了新的字符串。
- StringBuilder:可变字符串。字符串内容可以改变。线程不安全,但是效率高。(常用)
- StringBuffer:可变字符串。字符串内容可以改变。线程安全,但是效率低。
- 创建字符串的方式:
直接赋值
String name="zhangsan" //常用
通过new
String str = new String("薛之谦");
- 两种方式创建字符串对象的区别:
第一种方式:首先去字符串常量池中查看是否已经存在字符串:"zhangsan",如果存在则直接返回该字符串对象的引地址; 如果不存在,则创建该字符串对象"zhangsan",并放入字符串常量池,然后返回引用地址。
第二种方式:首先在堆中创建一个字符串对象,然后再去常量池中查看是否已经字符串:"薛之谦", 如果存在则直接返回该字符串对象的引用地址给字符数组value; 如果不存在,则创建该字符串对象"薛之谦",并放入字符串常量池,然后返回引用地址给字符数组value。
- 关于String字符串的操作都会生成新的字符串。
replace():替换字符串内容
length():获取字符串长度
charAt():获取指定下标对应的字符
subString():截取字符串
indexOf():获取指定子字符串对应的下标
concat():拼接字符串
contains():是否包含某字符串内容
- StringBuilder:可变字符串,可以直接修改字符串内容,并且不会产生新的字符串对象
append(String str):追加字符串内容
delete(int start,int end):删除指定字符串内容
insert(int index,String str):插入字符串内容