String类字符串为不可变字符序列。
1.Java中两种字符串初始化方法
String str1 = new String("abcd");
String str2 = new String("abcd");
String str3 = "def";
String str4 = "def";
System.out.println(str2.equals(str1));//比较内容是否相等
System.out.println(str2 == str1);
System.out.println(str4.equals(str3));
System.out.println(str4 == str3);
两种初始化方式都是返回一个String对象,但是JVM的处理方式不同。
对于第一种,JVM会马上在堆中创建一个String对象,然后将该对象的引用返回给用户。对于第二种,JVM首先会在内部维护的strings pool中通过String的equels方法查找是对象池中是否存放有该String对象,如果有,则返回已有的String对象给用户,如果没有JVM则在堆中创建新的String对象,将其引用返回给用户,同时将该引用添加至strings pool中。
equals方法比较的是两个字符串的内容,属于内容比较。
“==”比较的是两个字符串内存地址的数值是否相等,属于数值比较。
2.字符串中的字符替换
String str5 = str3.replace('e', '*');
System.out.println(str5);
3.字符串中的分割
String str6 = "abcd,efgh,ijkl";
String[] strArray = str6.split(",");
for(int i=0;i<strArray.length;i++){
System.out.println(strArray[i]);
}
4.字符串中的去掉首尾空格
String str7 = " aa bb ";
String str77 = str7.trim();//去掉首尾空格
System.out.println(str77);
5.字符串中的忽略大小写
System.out.println("Abc".equalsIgnoreCase("abc"));//忽略大小写比较
6.字符串中的
System.out.println("Abcbd".indexOf('b'));
System.out.println("Abcbd".lastIndexOf('b'));
System.out.println("Abcbd".startsWith("Ab"));
System.out.println("Abcbd".endsWith("bd"));
System.out.println("Abcbd".toLowerCase());
System.out.println("Abcbd".toUpperCase());
7.字符串与数字进行运算
String str8 = "a";
for(int i=0;i<3;i++){
str8 = str8 + i;
}
System.out.println(str8);
String str9 = new String("a");
for(int i=0;i<3;i++){
str9 = str9 + i;
}
System.out.println(str9);//5个对象,太浪费空间
这两个的输出结果都是“a012”,但方式很大区别
第一种,每循环一次,str8所指向的字符串变动一次,分别指向“a”,“a0”,“a01”,“a012”。
第二种,初始化时会产生两个对象,这样对于循环次数过多的情况,会使得内存浪费。