字符串分类:
不可变字符串:字符串的值改变时,地址改变
可变字符串:字符串的值改变时,地址不变
可变字符串又分为:String Builder和String Buffer
String ,String Builder和String Buffer都实现了charSequence接口
创建字符串的两种方式
String str = "hah";
String str2 = new String("hh");
字符串对象值为空
//未分配内存空间
String s1 = null;
String s2 ;
//分配了内存空间
String s3 = "";
字符串的比较
String a1 = "ABC";
String a2 = new String("ABC");
System.out.println(a1 == a2);
【false】
System.out.println(a1.equals(a2));
【true】
分析:
System.out.println(a1.equals(a2));
在equals方法中会先判断其地址是否相同
若不相同,
判断所传数据是否是String类
是,接着判断两个数据的每一个字符是否相同
字符串内存分析
String str = new String("ABCD");
会先在堆中创建一个对象(开辟一个空间),然后去常量池(方法区)中寻找是否有该变量,如果有,直接引用常量池中的内容
如果没有,将在常量池中开辟空间,至少创建一个对象
String str2 = "ABCD";
创建一个或不创建对象(如果常量池中已经有了该变量,则不需要再创建对象)
//属于lang包,不需要导包
//判断两个字符串是否相等
String a="AB";
String a2 = new String("ab");
System.out.println(a == a2);false
System.out.println(a.equals(a2));false
System.out.println(a.equalsIgnoreCase(a2));true(忽略大小写的比较)
//大小写转换
String b="ab";
System.out.println(b.toUpperCase());AB
String b2="AB";
System.out.println(b2.toLowerCase());ab
//返回在字符串中第一个/最后一个出现值的位置;
String c="abcdefde";
String c2="bc";
String c3="de";
System.out.println(c.indexOf(c2));1
System.out.println(c.indexOf(c3));3
System.out.println(c.lastIndexOf(c3));6
//把char类型的数组转换成字符串类型
char[ ] d = {'a','b','c'};
String d2 = new String(d);
System.out.println(d2);"abc"
//把字符串类型转换成char类型的数组
char[ ] d3 = d2.toCharArray();
System.out.println(d3);'a''b''c'
//输出字符串中某个位置的数据
String a6 = "123456";
System.out.println(a6.charAt(4));