课堂的一些笔记,加上自我理解,有错误请谅解指出。
一,可变字符串序列和不可变字符串序列
(1) String属于java中的字符串类型,也是一个引用类型,但并非是基本的数据类型,基本的数据类型为数值型:byte,short,int,long;浮点型:float,double;字符型:char;布尔型:boolean。
String类型一旦被创建其值便不可在改变。
String s1 = "lo";
String s2 = "ve";
String s3 = s1 + s2;
String s4 = "love";
System.out.println(s3==s4);//结果返回false
String s5 = "lo" + "ve" ;
String s6 = "love";
System.out.println(s5==s6);//结果返回ture
其结果说明字符串在拼接之后会在内存中创建新的内存地址,虽然可以通过这种拼接的方式改变字符串的长度,但是与此同时也会改变它的内存地址。而s5字符串的拼接会直接在堆中创建它他们拼接后的内存地址,即在常量池中创建"love",s6直接从常量池中取得"love",内存地址自然相同。
(2)而StringBuffer是可变字符串序列,它可以通过append,insert和delete方法改变字符串序列,改变后的内存地址与之前的一致。
StringBuffer sBuffer = new StringBuffer ("abc");
System.out.println(sBuffer.length());//返回字符串的长度3
StringBuffer sBuffer1 = sBuffer.append("def");
System.out.println(sBuffer==sBuffer1);//结果返回ture
System.out.println(sBuffer.capacity());//返回创建的内存大小19
StringBuffer sBuffer2 =sBuffer1.insert(3, "love");
System.out.println(sBuffer2);//返回值abclovedef
StringBuffer sBuffer3 =sBuffer2.delete(1, 3);
System.out.println(sBuffer3);//返回值alovedef