我们知道String声明的字符串是不能被改变的。那么如果我们使用下面的语句:
String str = "Hello" ;
str = str + "World!" ;
你会发现,我们如果输出str,答案是:Hello World!
那么,从表面上看str被改变了,而实际上是这样的:
当我们执行上面的两条语句后,中间的过程用如下图来表示:
也就是说开始用String申请的空间保存的"Hello"在内存中是不变的,在连接“World!”的时候重新申请了空间。最后str重新指向str + "World!"。
可以发现,如果在一个程序中我们大量使用这样的语句将会使程序的效率变得非常低,因为一是在指向新的内存块之前要先断开原来的指向链接,二是这样会产生很多垃圾空间。
String类中的重要API
1.public char[] toCharArray() 将字符串转化为字符数组。
例:char c[] = str.toCharArray();
2.char charAt(int index) 返回字符串中下标为index的字符。
3.将字符数组转化为字符串
例:str1 = new String(c) 把字符数组的全部字符转化为字符串
str2 = new String(c,start,num) 把字符数组的部分字符转化为字符串
4.字符串与Byte数组的转换
byte数组(字节数组),在一般的IO操作中会经常使用到。
byte[] getBytes() 将字符串变为字节数组
5.查找指定的字符是否存在
public int indexOf(String str) 返回的是字符串的位置,如果不存在则返回-1
6.去掉字符串的多余的空格,只能去掉左右两边多余的空格,而中间的不能。 例如:str.trim()
7.字符串截取
例:str.substring(6) 从第七个位置开始截取到结尾。
str.sunstring(0,5) 0为起始位置,5为结束位置的子串。
综合应用:
public class StringAPI {
public static void main(String[] args){
String str = "HelloWorld!";
char c[] = str.toCharArray(); // 把字符串转化为字符数组
for(int i=0;i<c.length;i++){
System.out.print(c[i]+" ");
}
System.out.println();
String str1 = new String(c); //把字符数组转化为字符串
String str2 = new String(c,0,3);//把字符数组中的从0开始的3个字符转化为字符串
System.out.println(str1);
System.out.println(str2);
System.out.println(str1.charAt(4)); //取出str1中下标为4的字符
byte c1[] = str.getBytes();
}
}