Java String
String 是一个final 类,代表不可变的字符序列。底层使用char[ ]存放。
String 的内存解析:
public void test1(){ String str1 = "JavaEE"; String str2 = "JavaEE"; String str3 = new String("JavaEE"); String str4 = "JavaEE" + "Android"; String str5 = "Android"; String str6 = str1 + str5; str5 = str5 + "Handoop"; String str7 = str6.intern(); String str8 = "JavaEEAndroid"; System.out.println(str1 == str2);//true System.out.println(str1 == str3);//false System.out.println(str1.equals(str3));//true System.out.println(str4 == str6);//false System.out.println(str4.equals(str6));//true System.out.println(str7 == str4);//true System.out.println(str4 == str8);//true Person p1 = new Person("AA"); Person p2 = new Person("AA"); System.out.println("^_^"+ (p1.name == p2.name));//true }
所以,String s = new String("xyz");创建了2个String Object.
String 方法
字符串对象操作的方法:
public int length() public char charAt(int index) // 返回在指定index位置的字符。 public boolean equals(Object anObject) //比较字符串是否相等。相等返回true。 public int compareTo(String anotherString) //从index = 0 开始比较,直到不等,返回不等时的差值 public int indexOf(String s) //返回s字符串在当前字符串中首次出现的位置。若没有,返回 -1. public int indexOf(String s ,int startpoint) //返回s字符串从当前字符串startpoint 位置开始的,首次出现的位置 public int lastIndexOf(String s) //返回s字符串在当前字符串中最后一次出现的位置。若没有,返回 -1. public int lastIndexOf(String s ,int startpoint) public boolean startsWith(String prefix) //判断当前字符串是否以prefix 开始 public boolean endsWith(String suffix) //判断当前字符串是否以suffix 结束 public boolean regionMatches(int firstStart,String other,int otherStart ,int length) //判断当前字符串从firstStart开始的子串与另一个字符串other从otherStart开始,length长度的字串是否equals public boolean contains(String s) //判断当前字符串是否包含s
字符串对象修改的方法:
public String substring(int startpoint) public String substring(int start,int end) //返回从start开始到end结束的一个左闭右开的子串。start可以从0开始的。 pubic String replace(char oldChar,char newChar) //将当前字符串出现的所有oldChar 都改为newChar。返回的是一个字符串。但当前的字符串不会改变。 public String replaceAll(String old,String new) //类似上一个 public String trim() //去除当前字符串中首尾出现的空格,若有多个,就去除多个。 字符串中间的空格不会去除。 public String concat(String str) //连接当前字符串与str 但当前的字符串不会改变。 public String[] split(String regex) //按照regex将当前字符串拆分,拆分为多个字符串,整体返回值为String[] public Char[] toCharArray() //
转换
1. 字符串 与基本数据类型、包装类之间转换
( 1). 字符串 --->基本数据类型、包装类: 调用相应的包装类的parseXxx(String str); (2). 基本数据类型、包装类--->字符串: 调用字符串的重载的valueOf()方法
2. 字符串与字符数组间的转换
(1). 字符串---->字符数组:调用字符串的toCharArray();
(2). 字符数组---->字符串:调用字符串的构造器
3. 字符串与字节数组间的转换
(1). 字符串---->字节数组:调用字符串的getBytes()
(2). 字节数组---->字符串:调用字符串的构造器
StringBuffer
StringBuffer代表可变的字符序列,是一个容器。
StringBuffer类有三个构造方法:
1.StringBuffer()初始容量为16的字符串缓冲区 2.StringBuffer(int size)构造指定容量的字符串缓冲区 3.StringBuffer(String str)将内容初始化为指定字符串内容
StringBuffer 方法
StringBuffer append(String s), StringBuffer append(int n) , StringBuffer append(Object o) , StringBuffer append(char n), StringBuffer append(long n), StringBuffer append(boolean n), StringBuffer insert(int index, String str) public StringBuffer reverse() : 反转此StringBuffer StringBuffer delete(int startIndex, int endIndex) public char charAt(int n ) public void setCharAt(int n ,char ch) StringBuffer replace( int startIndex ,int endIndex, String str) public int indexOf(String str) public String substring(int start,int end) public int length() 总结:添加:append() 删除:delete(int i,int j) 修改:setCharAt(int index,char ch) 查 charAt(int n); 插入:insert(int index,String str) 反转:reverse() 长度:length()
StringBuilder类
String:不可变字符序列
StringBuffer:可变字符序列、效率低、线程安全
StringBuilder(JDK1.5):可变字符序列、效率高、线程不安全
效率从高到底: StringBuilde > StringBuffer > String