1.String类:String 是不可变字符序列
1) char charAt(int index)返回字符串中第 index 个字符。
2) boolean equalsIgnoreCase(String other) 如果字符串与other
相等(忽略大小写),则返回 true
3) int indexOf(String str) lastIndexOf() 查找指定字符串
出现的位置(下标)
4) int length()返回字符串的长度。
5) String replace(char oldChar,char newChar)返回一个新串,
它 是 通过 用 newChar 替 换 此字 符 串中 出 现的 所 有
oldChar 而生成的
6) boolean startsWith(String prefix)如果字符串以 prefix 开始,
则返回 true
7) boolean endsWith(String prefix) 如果字符串以 prefix 结
尾,则返回 true
8) String substring(int beginIndex)
String substring(int beginIndex,int endIndex)返回一个新字符
串,该串包含从原始字符串 beginIndex 到串尾或 endIndex-1
的所有字符
9) String toLowerCase()返回一个新字符串,该串将原始字符
串中的所有大写字母改成小写字母
10) String toUpperCase()返回一个新字符串,该串将原始字
符串中的所有小写字母改成大写字母
11) String trim() 返回一个新字符串,该串删除了原始字
符串头部和尾部的空格

public class MyString { public static void main(String[] args) { String str1 = "hello word"; String str2 = "hello word"; System.out.println(str1.charAt(1));//e 返回字符串中第 index 个字符。 System.out.println(str1.length());//10 System.out.println(str1.equalsIgnoreCase("abc"));//false System.out.println(str1.equals(str2));//true System.out.println(str1.indexOf('d'));//9 下标从0开始 System.out.println(str1.lastIndexOf('o'));//7 System.out.println(str1.replace('o', 'q'));//hellq wqrd System.out.println(str1);//hello word 上一条语句替换没有发生在原来的字串中 而是产生一个新串作为输出 System.out.println(str1.startsWith("he"));//true System.out.println(str1.endsWith("rd"));//true System.out.println(str1.substring(3));//lo word System.out.println(str1.substring(1, 6));//ello System.out.println(str1);//hello word str1 = str1.substring(3); System.out.println(str1);//lo word String str3 = " HELlo word "; System.out.println(str3.trim());//HELlo word System.out.println(str3.toLowerCase());// hello word System.out.println(str3.toUpperCase());// HELLO WORD } }
2.String比较和构造方法
compareTo源码:先比较每一个字符是否相同,再比较长度

public int compareTo(String anotherString) { int len1 = value.length; int len2 = anotherString.value.length; int lim = Math.min(len1, len2); char v1[] = value; char v2[] = anotherString.value; int k = 0; while (k < lim) { char c1 = v1[k]; char c2 = v2[k]; if (c1 != c2) { return c1 - c2; } k++; } return len1 - len2; }
实例:

public class TestString { public static void main(String[] args) { String str="apple"; String str2="banana"; String str3="cat"; String str4="dog"; String str5="app"; /**求两个字符串的长度的最小值,使用循环,比较对应位置上的字母,如果不相同,则对应位置字母的ASCII值相减*/ System.out.println(str.compareTo(str2)); //-1 97-98? System.out.println(str.compareTo(str3));//-2 97-99? System.out.println(str.compareTo(str4));//-3 97-100? //两个字符串的长度相差 5-3=2 System.out.println(str.compareTo(str5)); //2 /**String类的构造方法*/ String s1=new String();//创建了一个长度为0的字符串 String s2=null;//没有创建对象,只是声明了String类型的对象s2 String s3=new String("hello"); //通过char类型的数组构造String对象 char [] c={'a','b','c'}; String s4=new String(c); System.out.println(s4);//abc byte [] b={97,98,99}; String s5=new String(b); String s6=new String(c,0,2); System.out.println("s6:"+s6);//s6:ab } }
3.字符串相等的判断
==:比较两个字符串内存地址是否相等
equals(Object obj):用于比较两个字符串对象的内容是否相等
1 public class TestString { 2 public static void main(String[] args) { 3 String str="abc"; 4 String str2=new String("abc"); 5 System.out.println("两个对象的内存地址是否相等:"+(str==str2));//false 6 /**比较对应位置上的字符是否相等,如果所有的对象位置上的字符均相等,true,否则返回false*/ 7 System.out.println("两个对象的内容是否相等:"+(str.equals(str2))); 8 //以下结果为 false 9 /**因为Person对象 instanceof String 的结果为false ,直接返回false*/ 10 System.out.println("String对象与Person对象的内容是否相等:"+(str.equals(new Person()))); 11 } 12 } 13 class Person{ 14 15 }
4.常量池:用于存储在编译期确定,并被保存在已编译的字节码文件中的一些数据,包括 final 修饰变量及字符串变量,和符号引用量。
1 public class TestString2 { 2 public static void main(String[] args) { 3 String str1="abc"; 4 String str2="a"+"b"+"c"; 5 String str3=new String("abc"); 6 String str4=str3+""; 7 String str5=new String("abc"); 8 System.out.println("str1==str2:"+(str1==str2));//true 9 System.out.println("str1==str3:"+(str1==str3));//false 10 System.out.println("str1==str4:"+(str1==str4));//false 11 System.out.println("str3==str5:"+(str3==str5));//false 12 13 } 14 }
等号右侧有new则在堆里开空间