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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
     (1)引用数据类型包括类,接口和数组,而Sring属于类,是引用数据类型。
     (2)字符串效果上相当于字符数组( char[] ),但是底层原理是字节数组( byte[] ),
         数组的长度确定以后是不能改变的,所以字符串的长度不可变。

2.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
     String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?

(1) String s = new String("abc");这句话创建2个对象,
     s在堆内存中创建,“abc”在在堆内存中的字符串常量池中创建

(2)String s = "abc"; 当字符串常量池没有“abc”时,
    在堆内存中的字符串常量池中创建1个对象, 否则没有创建对象。

3.StringBuilder的作用,为什么要使用StringBuilder

      StringBuilder 是一个可变的字符串类,可以用它来存放字符串。
      因为字符串对象在java中使用非常频繁,如果每次使用相同内容的字符串都要重新创建对象,这样对内存的消耗非常大,而使用StringBuilder,当要使用字符串的时候,就会去字符串常量池中去找,有没有值相同的字符串,如果有,直接引用该对象的地址,如果没有,创建字符串对象,并存入常量池中,以便下次使用。

点评

发表于 2019-7-23 00:17
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
引用数据类型,因为字符串是常量,创建后不可被改变。

2.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
第一,前者new的对象创建了两个对象,在堆内存中创建一个对象,一个放在字符串常量池中
第二,后者String创建了一个对象,在字符串常量池中


3.StringBuilder的作用,为什么要使用StringBuilder
长度可变的容器字符串缓冲类,因为StringBuilder可以随意添加字符串,而且都是在一个对象上操作,转为String类也只需要调用toString方法即可。
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马