String是内存的常量,值在内存中一旦创建,不可改
创建方式:
1:直接双引号赋值
String 引用名="值";
2:构造赋值
String 引用名=new String("值");
串池
全程为:字符串常量池
在实际开发中,字符串是使用频率最高的数据类型,且复用度也很高,为了避免重复的字符串内容反复创建造成空间资源浪费,所以在方法区中设立了串池,目的是为了节省空间
区别:
1:第一种创建方式:
优先使用串池,先从串池中查找有无对应字符串内容,若有,则会让引用直接指向对应的串池地址,若无,则会现在串池中创建该字符串的内容,然后再让引用指向
2:第二种创建方式:
无论如何都会开辟对象空间地址,开辟完对象空间之后,进入串池查找内容是否存在,若存在,则直接存放对应的串池地址,若不存在,则现在串池中创建该内容,然后再存放串池地址
可变长字符串
值可改:
1:StringBuffer:JDK1.0 线程安全,效率低
2:StringBuilder JDK5.0 较StringBuffer来说线程不安全,效率高
特点:
必须通过构造创建
所有字符串内容操作必须借助方法完成
与String的区别
1:String是内存中常量,值不可改,可变长字符串值可改
2:String可以使用串池,可变长字符串无法使用串池
实际开发中,对一个字符串内容反复使用的频率要远远高于更改的频率,所以可以使用串池的String要优于可变长字符串
String的常用方法
String 引用名.方法名(实参);
1:char chatAt(下标):获取指定下标位置的元素
2:boolean contains(字符串):判断当前字符串是否包含指定内容
3:boolean endsWith(字符串):判断字符串是否以指定内容结尾
4:boolean starsWith(字符串):判断字符串是否以指定内容开头
5:boolean equals(字符串):判断字符串内容是否相同,区分大小写
6:boolean equalsignoreCase(字符串):判断字符串内容是否相同,不区分大小写
7:String toUpperCase():转全大写
8:String toLowerCase():转全小写
9:int length(字符串):获取字符串长度
10:int indexOf(字符串):获取指定内容第一次出现的下标
11:int lastIndexOf(字符串):获取指定内容最后一次出现的下标
12:boolean isEmpty():判断字符串内容是否为空,不能判比null值
13:String replace(旧字符串,新字符串):将字符串指定旧内容替换为新内容,全部替换
14:String[] split(字符串分隔符):将字符串按照指定分隔符进行分割,不保留分隔符
15:String subString(起始下标):将字符串从起始下标截取至末尾
16:String subString(起始下标,结束下标):将字符串从起始下标截取至结束下标前一位
17:String trim():去除字符串前后空格
18:byte[] getBytes():以byte数组的形式返回字符串的内容
19:char[] toCharArray():以char数组的形式返回字符串的内容