今日整理:
1 String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
引用数据类型,Srting类的字符串是常量
2 String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
一个对象,s在栈中,new String(“abc ”)在堆中
String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
一个对象,String s = “abc”都在堆里
3 StringBuilder的作用,为什么要使用StringBuilder?
StringBuilder是一个可变的字符序列对象,可以在一个对象中进行扩容,从而存储更多的字符串
4 说说今天你觉得重要的点.
①- 获取字符串长度的方法: length();
回顾一下获取数组的长度:length属性;
- 获取字符串中的字符串:char c = charAt(index);
- 拼接字符串:String str = str1.concat(String str2)
- 判断是否包含这个字符:boolean flag = str1.contrains(str2);
- 判断两个字符串的值是否一致:boolean flag = str1.equals(str2);
- 判断两个字符串的值是否一致,不考虑大小写:boolean flag = str1.equalsIgnoreCase(str2);
- 获取指定字符串在整个字符串中第1次出现的索引值:int index = str.indexOf(str1);
- 获取指定字符串在整个字符串中最后出现的索引值:int index = str.lastIndexOf(str1);
- 用新字符串,替换字符串老的字符串:String str =str. replace(char oldChar, char newChar)
- 获取从指定索引到结束的字符串:String newStr = str.substring(int beginIndex)
- 获取从指定索引到指定索引的字符串:String newStr = str.substring(int a,int b)
注意:substring(a,b):截取字符串时,包含起始位置a的字符,不包含结束位置b的字符
②String字符串的本质(字符串效果上相当于char字符数组):
String是通过char字符拼接的字符串,是通过索引查找字符的位置
String字符传串是通过char数组拼接,底层是通过byte数组
③1. 调用字符串对象的length()方法,获取其实是字符串有几个字符组成的
2. 调用字符串对象的charAt(索引)方法,索引的最大值= 字符串的长度-1;
如果超出了最大索引,会报索引越界异常。
④1. 字符串是常量;它们的值在创建之后不能更改。
2. 因为 String 对象是不可变的(String str="abc"),所以可以共享
⑤使用== 比较引用类型的对象,其实比较都是对象的地址值;比较对象中的实际的字符串值,而不是比较对象的地址值
.equals(字符串对象):比较的就是字符串的值
⑥StringBuilder,一个可变的字符序列。它会默认创建一个长度为16的字符串缓冲区,可以用StringBuilder添加字符串。
如果添加的字符串超出了16这个长度,会以2n+2的长度动态扩容。 |