A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 厦门校区   /  2019-9-21 17:43  /  3445 人查看  /  21 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
String类为引用数据类型
字符串长度不可变是因为:字符串相当于是由字符拼接成的数组,它一旦创造,就会在内存里为它开辟一段内存空间,并赋予它地址值,
修改它的长度,相当于创建一个新的字符串,有新的地址值
(修改字符串长度,相当于给它添加/删除 字符 ,它的内容也和原来不同,是一个新的字符串)
2.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
这句代码创建了两个对象,new 出来的对象在堆内存中创建,
而"abc"先在堆内存里的常量池寻找是否已存在"abc"这个字符串,若没有则在常量池里创建这个字符串,并给它一个地址值

  String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
这句代码创建了一个对象,"abc"先在堆内存里的常量池寻找是否已存在"abc"这个字符串,若没有则在常量池里创建这个字符串,并给它一个地址值,若已存在则直接调用即可,不会创建新的对象

3.StringBuilder的作用,为什么要使用StringBuilder
StringBuilder是可变的字符串类,它提供一个缓冲区,可以把它看成是一个可以不断变大的容器,可以让里面东西不会满溢出来

如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,
既耗时,又浪费内存空间.而且这种操作还不可避免,但是借助StringBuilder就能解决这个问题
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
答:引用数据类型,因为String字符串底层是char数组,而数组在创建之初长度就是固定的,因此字符串的长度是不可变的。且字符串拼接时,就会产生新的对象,原对象上的长度无法改变。

2.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
答:String s = new String("abc")在堆内存中创建了2个区域。1个是在堆内存中新建了一个new String,
      另一个是在堆内存中的常量池生成一个“abc”;
String s = "abc";创建了1个对象,在栈内存中创建的。

3.StringBuilder的作用,为什么要使用StringBuilder
答:StringBuilder能够快速的完成拼接或完成反转,而且StringBuilde是一个可变的字符串序列,每拼接一次,都会在原对象的内容上进行拼接,不会产生新的对象。
因为String字符串拼接时,会产生新的对象,占用内存,拼接效率较低,所以使用StringBuilder提高效率。
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马