1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
String类为引用数据类型
字符串长度不可变是因为:字符串相当于是由字符拼接成的数组,它一旦创造,就会在内存里为它开辟一段内存空间,并赋予它地址值,
修改它的长度,相当于创建一个新的字符串,有新的地址值
(修改字符串长度,相当于给它添加/删除 字符 ,它的内容也和原来不同,是一个新的字符串)
2.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
这句代码创建了两个对象,new 出来的对象在堆内存中创建,
而"abc"先在堆内存里的常量池寻找是否已存在"abc"这个字符串,若没有则在常量池里创建这个字符串,并给它一个地址值
String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
这句代码创建了一个对象,"abc"先在堆内存里的常量池寻找是否已存在"abc"这个字符串,若没有则在常量池里创建这个字符串,并给它一个地址值,若已存在则直接调用即可,不会创建新的对象
3.StringBuilder的作用,为什么要使用StringBuilder
StringBuilder是可变的字符串类,它提供一个缓冲区,可以把它看成是一个可以不断变大的容器,可以让里面东西不会满溢出来
如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,
既耗时,又浪费内存空间.而且这种操作还不可避免,但是借助StringBuilder就能解决这个问题 |