String(不可变字符序列)
常用方法
equalsIgnoreCase 忽略大小写 System.out.println( "Abcd".equalsIgnoreCse("abcd"));
indexOf 索引 System.out.println( "Abcd".indexOf("b"));
lastIndexOf 反向索引 System.out.println( "Abcd".lastIndexOf("b"));
startsWith 以什么开头 System.out.println( "Abcd".startsWith("Ab"));
endsWith 以什么结束 System.out.println( "Abcd".endsWith("cd"));
代码示例:
package cn.String; public class TestString { public static void main(String[]args) { String str =new String("abcd"); String str2=new String("abcd"); System.out.println(str.equals(str2)); //比较内容是否相等 True System.out.println(str2==str); //false System.out.println(str.charAt(3)); //查询内容 String str3="def"; String str4="def"; System.out.println(str3.equals(str4)); //True System.out.println(str3==str4); //True System.out.println(str3.indexOf('f')); //2 查询索引号 String s=str3.substring(1); //截取字符串 System.out.println(s); //有指定的打印字符串 String str5=str3.replace('e', 's'); //字符串替换 System.out.println(str5); String str6="abcde,rrtt,cccee"; String strArray[]=str6.split(","); //用逗号使其分开转化为数组 for(int i=0;i<strArray.length;i++) { System.out.println(strArray[i]); } String str7=" aa bb "; System.out.println(str7.length()); //9 String str77=str7.trim(); //切去没有用的部分 System.out.println(str77.length()); //5 System.out.println("Abc".equalsIgnoreCase("abc")); //true System.out.println("Abcdfb".indexOf('b')); //1 查看索引号 System.out.println("Abcdfbeb".lastIndexOf('b')); //5 查询最后一个 System.out.println("Abc".startsWith("Ab")); //true 以什么开始 System.out.println("Abc".endsWith("c")); //true 以什么结束 System.out.println("Abcdfbeb".toLowerCase()); //abcdfbeb 转化为小写 System.out.println("Abcdfbeb".toUpperCase()); //ABCDFBEB 转化为大写 String gh="a"; //注意:字符串拼接,一共11个对象,如果String gh=new String("a"),遍历后有12个对象,a是一个new String 也是一个. for (int i = 0; i < 10; i++) { gh+=i; } System.out.println(gh); } }
StringBuilder StringBuffer(可变字符序列)
两者源码几乎一样
不同点:
StringBuider: 线程不安全,效率高
StringBuffer: 线程安全,效率低
我们使用的是局部变量,一般使用StringBuilder
示例:
package cn.stringbuilder; public class Test01 { public static void main(String[] args) { StringBuilder sb=new StringBuilder(); //字符数组长度初始为16 StringBuilder sb1=new StringBuilder(32); //字符数组长度初始为32 StringBuilder sb2=new StringBuilder("abcd");//字符数组长度为20 value[]={'a','b','c','d',u0000,u0000...} sb2.append("efg"); sb2.append("sun").append(true).append("哈哈");//通过return this 实现方法链 System.out.println(sb2); StringBuilder gh=new StringBuilder('a'); //'a'是一个对象,new StringBuilder是一个对象,总共两个对象.省内存. for (int i = 0; i < 100; i++) { gh.append(i); } System.out.println(gh); } }
内存优化小总结:
代码对比
第一种 String gh="a"; //注意:字符串拼接,一共11个对象,如果String gh=new String("a"),遍历后有12个对象,a是一个new String 也是一个. for (int i = 0; i < 10; i++) { gh+=i; } System.out.println(gh); 第二种 StringBuilder gh=new StringBuilder('a'); //'a'是一个对象,new StringBuilder是一个对象,总共两个对象.省内存. for (int i = 0; i < 100; i++) { gh.append(i); } System.out.println(gh);
推荐第二种,省内存。