Java的String详解
1.字符串是常量,创建之后不可改变
2.字符串字面值存储在字符串池中,可以共享
3.String s = new String(“hello”);//产生两个对象,堆,池中各存储一个
产生两个对象并不会浪费空间,因为实际上在真正运行的时候堆中的对象不存在“hello”,而是指向字符串池中的“hello”,使用的是字符串池中的对象
通过下面的图来理解:
触发面试题:
public class Test {
public static void main(String[] args) {
String s = "hello";//"hello"存储在字符串池中
s = "yuan";
//"yuan"赋值给了s变量,给字符串赋值时,并没有修改数据,而是在字符串池中重新开辟了空间
//所以说字符串是不可变的
String s1 = "yuan";
String s2 = new String("java");//产生两个对象,堆,池中各存储一个
String s3 = new String ("java");
System.out.println(s2==s3);//false(比较的是两个对象的地址)
System.out.println(s2.equals(s3));//true(比较的是两个对象的值)
}
}
问: String s2 = new String(“java”);这行代码创建几个对象?
答:
创建两个对象,一个在堆,一个在字符串池中
根据以上代码,这一行System.out.println(s2==s3);//false输出false的原因是?
字符串变量比较如果用==去比较那么比较的是地址值,所以相同的字符串比较结果为false,所以字符串之间的比较必须用equals
String的常用方法
1.length();返回字符串的长度
2.charAt(int index);返回某个位置的字符
3.contains(String str);判断是否包含某个字符串
4.toCharArray();返回字符串对应的数组
5.indexOf();返回字符串首次出现的位置
6.lastIndexOf();返回字符串最后一次出现的位置
7.trim()去掉字符串前后的空格,不会去掉字符串中的空格
8.toUpperCase();把小写字母转换成大写,toLowerCase()把大写字母转换成小写
9.endWith(String str);判断是否以str结尾,startWith(String str)判断是否以str开头
10.replace(char old,char new);用新的字符或字符串替换旧的字符或字符串
11.split();对字符串进行拆分,如果遇到空格和逗号都要拆分的话就在中括号里面加上空格与逗号,例如:
String []arry2 = say2.split("[ ,]"),
如果字符串中含有多个空格,那就在[ ,]后面加个+号,例如:
String []arry2 = say2.split("[ ,]+")
代码实现
public class Test {
public static void main(String[] args) {
String content= "java是世界上最好的java语言,java真好";
System.out.println("-----------------------字符串方法的使用1-----------------------------");
//返回字符串的长度
System.out.println(content.length());
// 获取某个位置的字符
System.out.println(content.charAt(content.length() - 1));
//System.out.println(content.charAt(content.length()));
//System.out.printlncontent.charAt(content.length())出现java.lang.StringIndexOutOfBoundsException异常,
// 因为该字符串长度下标越界了
//判断是否包含某个字符串
System.out.println(content.contains("java"));
System.out.println(content.contains("php"));
System.out.println("-----------------------字符串方法的使用2-----------------------------");
//返回字符串对应的数组
System.out.println(Arrays.toString((content.toCharArray())));
//返回字符串首次出现的位置
System.out.println(content.indexOf("java"));//0
//返回字符串java出现的位置
System.out.println(content.indexOf("java", 4));//44
//第二个参数是指从第几个下标开始数
//返回字符串最后一次出现的位置
System.out.println(content.lastIndexOf("java"));//18
System.out.println("-----------------------字符串方法的使用3-----------------------------");
String content2 = " Hello World";
//trim()去掉字符串前后的空格
System.out.println(content2.trim());//Hello World
//toUpperCase();把小写字母转换成大写
System.out.println(content2.toUpperCase());// HELLO WORLD
//toLowerCase()把大写字母转换成小写
System.out.println(content2.toLowerCase());// hello world
String filename = "hello.java";
//endWith(String str);判断是否以str结尾
System.out.println(filename.endsWith(".java"));//true
//startWith(String str)判断是否以str
System.out.println(filename.startsWith("hello"));//true
System.out.println("-----------------------字符串方法的使用4-----------------------------");
//用新的字符或字符串替换旧的字符或字符串
System.out.println(content.replace("java", "php"));
//对字符串进行拆分
String say = "Java is the best programing language,java 真好";
String say2 = "Java is the best programing language,java 真好";
String []arry = say.split(" ");
String []arry2 = say2.split("[ ,]+");//遇到空格与逗号都拆分,中括号里面加上空格与逗号
System.out.println(arry.length);
for(String arr:arry){
System.out.println(arr);
}
for(String arr2:arry2){
System.out.println(arr2);
}
}
}