传智播客旗下技术交流社区北京校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?

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

3.StringBuilder的作用,为什么要使用StringBuilder
分享至 : QQ空间
收藏

23 个回复

倒序浏览
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类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?

        String是引用数据类型。底层是数组,数组的长度是固定的,所以字符串的长度也是不变的。

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

        String s = new String("abc")这个对象创建了两个对象,字符串"abc"在常量池中创建,String对象在堆内存中创建。

        String s = "abc",创建了一个对象,在常量池中创建的。

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

        StringBuilder的作用是在堆中创建一个字符串缓冲区,而不用每次都要创建新的字符常量提高字符串拼接效率。
        StringBuilder可变且从头到尾只创建了一个对象,节省了内存。因为不断的创建String类的字符串会在常量池中产生很多的空间浪费,为了避免这种情况所以提出了StringBuilder。
回复 使用道具 举报
本帖最后由 王达鑫 于 2019-7-11 21:56 编辑

1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
【1】引用数据类型
【2】字符串效果上相当于字符数组,但底层原理是字节数组
(注意:字符串不可改变、它的值在创建后不可更改,虽然值不可改变、但是值可以被共享使用,
为什么值可以被共享使用,因为在常量池中)

2.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
【1】2个对象,1个是"abc",1个是字符串对象s,"abc"在常量池,s在堆内存中new一个新空间
【2】1个对象,"abc"在常量池中,s在栈中

3.StringBuilder的作用,为什么要使用StringBuilder
【1】作用:StringBuilder用于频繁、大量、多次字符串的拼接(如果拼接的次数非常少,一两次,用String也可以)
【2】因为字符串频繁的进行拼接,因为字符串的长度和内容是不可改变的,所以拼接字符串是产生新的对象。
频繁的产生新对象,而创建对象的过程是比较消耗资源的,StringBuilder类,可以解决频繁拼接创建对象的问题,
因为StringBuilder类可以表示一个长度可变的字符串
【3】注意:
        (1)StringBuilder是一个字符串缓冲区,可以提高字符串拼接的效率
        (2)StringBuilder拼接调用append()方法,可以拼接任何数据
        (3)StringBuilder每次拼接之后,返回的都是对象本身,所以可以使用链式编程进行拼接操作
        (4)拼接完毕之后,记得转回到String,因为String对字符串的操作比较强大

点评

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

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


3.StringBuilder的作用,为什么要使用StringBuilder
长度可变的容器字符串缓冲类,因为StringBuilder可以随意添加字符串,而且都是在一个对象上操作,转为String类也只需要调用toString方法即可。
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?

答、String类是引用类型,字符串是一个常量,创建对象后不能更改


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

答  创建了2 个 ""双引号是在字符串常量池中  另一个在堆中 new StringBuilder(abc)中
    创建了2 个 "abc"  在字符常量池中    String s =  在栈中


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

答、StringBuilder 是用于频繁、大量的、多次的拼接时候使用
  使用原因
   StringBuilder是一个字符串缓冲区,可以提高字符串拼接的效率
   StringBuilder拼接调用append()方法,可以拼接任何数据
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
String类是引用数据类型,常量在内存中都是固定的。

2.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
String s = new String("abc");创建两个对象,new的对象存在栈中,对应的值存在堆中,"abc"会去字符串常量池中查找是否有"abc"对象,
如果没有,就会将该对象存放在字符串常量池中。
String s = "abc";创建了两个对象,赋值的对象存放在栈中,"abc"会去字符串常量池中查找是否有"abc"对象,
如果没有,就会将该对象存放在字符串常量池中。

3.StringBuilder的作用,为什么要使用StringBuilder
StringBulider的作用是用来大量修改字符串。
StringBuilder类,可以解决频繁拼接创建对象的问题,因为StringBuilder类可以表示一个长度可变的字符串
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
String类是引用数据类型,字符串的地址值不能改变,只能分享。
2.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
(1)创建了两个对象,一个在堆内存创建了一个对象,另一个在字符串常量池创建对象。
(2)创建了一个对象,在字符串常量池里面创建对象。
3.StringBuilder的作用,为什么要使用StringBuilder
StringBuilder是一个可变字符串,可以用来存储字符。它可以用来减少创建对象的次数,使用StringBuilder创建一个对象,可以一直在这个对象中去扩容,提高程序的执行效率
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
是引用数据类型,因为他们的值在创建之后无法更改。

2.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
两个对象,一个对象在堆内存中被new出来,另一个""的被引进字符串池中。
一个对象 在字符串池中。

3.StringBuilder的作用,为什么要使用StringBuilder
他的作用是作为一个预先加载容量的字符串容器,因为StringBuilder的内容是可变的,能够在很大程度上降低对字符串池的内存占用。
回复 使用道具 举报

1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
引数类型 在内存内运行会被改变,字符串是个常量所以不能被改变
2.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
第一个在堆内存中创建一个 在常量池里创建一个 所以一共是两个。

3.StringBuilder的作用,为什么要使用StringBuilder
字符串的缓存区域,可以提高多字符拼接的效率,append方法还可以拼接任意字符。
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
   引用数据类型,在没有开辟内存空间时String的值在创建后不可以改变
   相当于定义了一个固定长度的数组

2.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
   
   (1) String s = new String("abc");创建啦两个对象,一个在堆内存新开辟的一个空间里一个在常量池中
   (2) String s = "abc"; 创建了一个,在堆内存的常量池中

3.StringBuilder的作用,为什么要使用StringBuilder
   
    对任意数据进行拼接,因为StringBuilder是用于大量和多次的拼接中并且可以拼接任意数据
    是一个字符串缓冲区可以提高拼接的效率   
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
  String是 引用数据类型;
  字符串不可改变、它的值在创建后不可更改。
  
2.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
   两个对象;  s在栈内存中,字符串在 堆内存中。
   两个对象;  s在栈内存中,“abc”在字符串常量池中。
  
3.StringBuilder的作用,为什么要使用StringBuilder
   用于多频繁、大量、多次的拼接。

   StringBuilder是一个字符串的缓冲区,可以提高字符串拼接的效率;
   Stringbuilder拼接调用append()方法,可以拼接任何数据;
   StringBuilder每次拼接之后,返回的都是对象本身;
   
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
引用数据类型,字符串是常量,常量不可改变

2.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
两个对象,一个在常量池中,一个在堆中
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
创建了一个对象,在常量池中创建
3.StringBuilder的作用,为什么要使用StringBuilder
StringBuilder是字符串缓冲区
相比String类,StringBuilder创建的对象长度是可变的。字符串的增改是在同一个对象中操作的
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?

String是引用类型
因为String类是常量

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

创建了一个对象,在对内存中创建
创建了一个对象,在对内存的常量池中创建

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

StringBuilder的作用是用于频繁,大量,多次的拼接。
StringBuilder可以提高字符串拼接的效率
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
其是引用数据类型。在定义一个字符串时,其的长度就固定了,在创建后字符串的值不能更改。

2.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
(1)其创建了两个对象,(String s = )在栈内存中创建;(new)在堆内存中创建。
(2)其创建了两个对象,创建在字符串常量池中和创建在栈中。


3.StringBuilder的作用,为什么要使用StringBuilder
可以提高拼接效率,调用append()方法可以拼接任何数据;拼接后返回值是其本身,可以进行链式操作;在某一些操作过程中可以简化步骤。
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
【1】String类 是引用数据类型.
【2】因为在创建字符串对象的时候,在堆内存开辟了一块新的空间,并且空间大小不变,所以字符串的长度是固定的.

2.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
【1】两个对象 , 分别是String();  和   "abc"  ,  一个在堆内存中 , 一个在堆内存中的常量池中.
【2】一个对象 , "abc" , 在堆内存中的常量池中.

3.StringBuilder的作用,为什么要使用StringBuilder
【1】作用:  StringBuilder  是一个可变的字符串 ,  用于频繁、大量、多次的拼接 .
【2】为什么要使用StringBuilder:   StringBuilder 是一个字符串缓冲区 ,可以提高字符串拼接的效率 .

——张柠
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
String类是引用数据类型。因为字符串是常量

2.String s = new String("abc");这句代码创建了几个对象?分别在内存中的哪个区域创建?
   String s = "abc";创建了几个对象,分别在内存中的哪个区域创建?
(1)创建了两个对象,s在堆内存创建,abc在常量池里创建。
      (2)创建了一个对象,在常量池中创建。

3.StringBuilder的作用,为什么要使用StringBuilder
在 StringBuilder 上的主要操作是 append 和 insert 方法,可重载这些方法,接受任意类型的数据,每个方法都能有效地将给定的数据转换成字符串
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?
答:String 是 引用数据类型,因为它的值在创建后不可被更改.

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

3.StringBuilder的作用,为什么要使用StringBuilder
答:StringBuilder的作用是创建字符串拼接, 多个字符拼接时对比String方法更节省资源更加效率.
回复 使用道具 举报
1.String类是基本数据类型还是引用数据类型?为什么字符串的长度不可变?]

是引用数据类型。String是java中的一个类,对字符数组进行了封装操作,一旦创建数组是不能改变的。

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

两个对象,在堆内存中的字符串常量池中,和栈内存的main方法内。

两个对象,在堆内存中和栈内存的main方法中

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

StringBuilder是当我们需要频繁创建对象来拼接数组的时候,用来代替麻烦的String类。使用StringBuilder能只需要创建一个对象,就能完成很长的字符串拼接,并且append方法不需要考虑数据类型,可以拼接任意基本类型,十分方便
回复 使用道具 举报
  
1.String类是引用数据类型 ,因为String本质上是char数组,而数组的长度是不可变的。
2.String s = new String("abc");创建了两个对象,一个是在堆内存中新建的对象,他的值指向常量池中“abc”的地址,另一个是由“”引号包括起来的字符串会直接存入到常量池中,而常量池其实是由于为了方便调用字符串所建的一个存在堆内存的特殊区域。String s = "abc"只创建了一个对象,存在常量池中。

3.StringBuilder会在堆内存中开辟一个空间,使得长度过长的字符串相加时,无需频繁存入字符串变量池中。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马