String 、StringBuilder、String
String:
字符串是常量,创建之后不可改变
字符串字面值存储在字符池中,可以共享
举例:
String s = “Hello”;产生一个对象,字符串池中存储
String s = new String("Hello");产生两个对象,堆,池各存储一个
String的常用方法:
String s = "Hello";
1.public char charAt(int index):根据下标获取字符
s.charAt(1);结果为“e”
2.public boolean contains(Strng str);判断当前字符串中是否包含str
s.comtains("Hel");结果为true s.comtains("Ho");结果为flase
3.public char[] tocharArray();将字符串转化为字符数组并返回
char[] chs = s.tocharArray();
4.public int indexOf(String str);查找str首次出现的下标,存在,则返回下标;不存在,则返回-1;
indexOf(int ch) s.indexOf('H')结果为0
indexOf(int ch,int fromIndex) s.indexOf('l',3)结果为1
indexOf(Strnig str, s.indexOf("el")结果为1
indexOf(Strnig str,int fromIndex) s.index("lo", 0)结果为3
5.public int lostIndexOf(String str)查找字符串最后一次出现的下标索引(比较????indexOf())
6.public int length()返回字符串的长度
7.public String trim()去掉字符串前后的空格
8.public String toUpper(asel);将小写转化为大写
9.public String toLower(asel);将大写转化为小写
10.对象名.equalsIgnorelase(另一对象)不论大小写,两者进行比较
11.public boolean endWith(String str)判断字符串是否以str结尾
12.public boolean startWith(String str)判断字符串是否以str为前缀
13public String relaace(char oldChar , char newChar)将旧字符串替换成新字符串返回
s.replace('e' , '123')
s.replace('e' , "222")
14.public String[] split(String str)根据str将字符拆分成数组,元素多少根据拆分的数量,拆分后str将消失
15.public String subString(int beginIndex)根据输入的值作为截取返回新字符串(从输入的值开始)
16.public boolean isEmpty()字符串数组长度为零时返回true,表示为空串
StringBuffer:
可变长字符串,JDK1.0提供,运行效率满、线路安全
StringBuilder:
可变长字符串,JDK5.0提供,运行效率快、线路不安全
保存在池中的条件:1.直接声明,2.首次出现
inter方法:
String s1= "abc"; //(保存在池中)
String s2 = s1 + "def";
//会自动运行StringBuilder会在堆中建一个新的stringBuilder对象,进行拼接,最后通过toString()方法返回一个new String () 对象给s2(保存在堆中)
s2.inter(); //过s2.inter();在池中创建一个为“abcdef”的字符串(池中没有创建过“abcdef”)
String s3 = "abcdef"; //复用s2保存在池中的地址
s2 == s3 true
String s1= "abc"; //(保存在池中)
String s2 = s1 + "def";
//会自动运行StringBuilder会在堆中建一个新的stringBuilder对象,进行拼接,最后通过toString()方法返回一个new String () 对象给s2(保存在堆中)
String s3 = "abcdef"; //在池中创建一个新的“abcdef”;
/*s2.inter(); //池中已经有一个“abcdef”的地址,所以不能创建,但是会返回一个名为“abcdef”的地址,需要赋值给新的变量。
s2 == s3 flase*/
String s4 = s2.inter();
s3 == s4; true