- 字符串是常量,创建之后不可改变。
- 字符串字面值存储在字符串池中,可以共享。
public class Demo3{
public static void main(String[] args){
String name = "hello";//常量存储在字符串池中
name = "zhangshan";//"zhangshan"赋值给name变量,给字符串赋值时,并没有修改数据,而是重新开辟一个空间
//当name指向"zhangshan"时,hello变成了垃圾,触发垃圾回收器时可能被回收。
name2 = "zhangshan";
}
}
- String s = "Hello";产生一个对象,字符串池中存储。
- String s = new String(“Hello”);//产生两个对象,堆、池条存储一个。
public class Demo3{
public static void main(String[] args){
String str = new String("Java");//实际运行时,堆中没有Java,而是指向了字符串池中的Java
String str2 = new String("Java");
System.out.println( str == str2);
}
}
str == str2 结果为false,str2会在堆中重新开辟一个空间,然后指向字符串池,但是str与str2地址不同,所以结果为0。
- 常用方法
-
- public int length() : 返回字符串的长度。
- public char charAt(int index) : 根据下标获取字符。
- public boolean contains(String str) : 判断当前字符串中是否包含str。
- public char[] toCharArray() :将字符串转换成数组。
- public int indexOf(String str):查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1。
- public int lastIndex0f(String str):查找字符串在当前字符串中最后一次出现的下标索引。
- public String trim():去掉字符串酋后的空格。
- public String toUpperCase():将小写转成大写,toLowerCase()将大写转成小写。
- public boolean endWith(String str):判断字符串是否以str结尾,startwith(String str)判断字符串是否以str开头。
- public boolean endWith(String str):判断字符串是否以str结尾。
- public String replace(char oldChar, char newChar);将旧字符串替换成新字符串。
- public String[] split(String str):根据str做拆分。
- 字符串比较大小可以用equals(),发返回值为bool型,compareTo()返回值是ASCII值之差,或两字符串长度之差。
public class Demo3{
public static void main(String[] args){
//Ascll值
String s1 = "abc";
String s2 = "ayzawe";
System.out.println( s1.compareTo(s2));
//长度
String s3 = "abc";
String s4 = "abcxysz";
System.out.println( s3.compareTo(s4));
}
}
- 可变字符串
-
- StringBuffer:可变长字符串(会先开辟一个缓冲区),JDK1.0提供,运行效率慢(比String快,比StringBuilder慢)、线程安全。
- StringBuilder:可变长字符串(会先开辟一个缓冲区),JDK5.0提供,运行效率快、线程不安全。
- 常用方法:append(),insert(),replace(),delete(),reverse()。