字符串
特点:
- 字符串内容永不改变
- 正是因为字符串永不改变,所以字符串是可以共享的
- 字符串效果上相当于char[]字符数组,但是底层原理是byte[]字节数组。
字符串的创建有三种:
第一种:
char a[]={‘a’,‘b’,‘c’};
String s=new String(a);
第二种:
String s=new String(“abc”);
第三种:
String s=“abc”;
第一种方式等价于第二种。通过“”创建的字符串是放在字符串常量池中的,通过new创建的不在字符串常量池中。
字符串保存在字符常量池中,从jdk1.7开始,字符串常量池就在堆(heap)中。
当你感觉字符串变化时,其实是新建了一个字符串。所以在需要使用字符串且字符串需要经常变化时,推荐使用StringBuilder,StringBuffer。他们三者的区别是:
String属于不可变字符序列,
StringBuilder属于可变字符序列,线程不安全,但效率高
StringBuffer属于可变字符串,线程安全,但效率低
字符串常用方法
- length();获取字符串长度
- indexOf(String Str);返回字符串中第一次出现Str的索引位置
- lastIndexOf(String str);返回指定字符串最后出现的索引位置
- charAt(int index);获取指定索引位置的字符
- substring(int beginIndex);返回从指定的索引位置开始截取直到该字符串结尾的字串
- substring(int beginIndex,int endIndex);返回从字符串某一索引位置开始截取至某一索引位置结束的子串
- trim();去除前导空格和尾部空格
- replace(char oldChar,char newChar);将指定的字符或字符串替换成新的字符或字符串。
- split(String sign,int limit);根据给定的分隔符对字符串进行拆分,并限定拆分次数。
- split(String sign);根据给定的分隔符对字符串进行拆分。
字符串的比较不能用“== ”,只能用equals()。所有的引用类型都只能用equals()。因为“ ==”比较的是两个字符串的地址是否相同,而equals()比较的是内容而不是地址。