2-11的问题

2-11的问题

1、常量池、对象池、缓存区,这到底是一个概念,还是不一样啊,感觉学的乱乱的。

2、

String str1="imoc";

String str2="imoc";

它们的具体扩展代码是什么样子的?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕小班 2019-06-24 18:59:38

        同学你好,1、用new产生的对象都在这儿,这是对象池,如:Integer a=22;实际的扩展代码是:Integer a=Integer.valueOf(22);,所以这个a的对象是在对象池中,而常量池用来放字符串常量和基本类型的常量,所以对象池与常量池没有关系哦!

对象池在包装类的内容中:

http://img1.sycdn.imooc.com//climg/5d10a91400015a4612270701.jpg

而常量池是内存中的另一个空间

http://img1.sycdn.imooc.com//climg/5d10aa2c0001b49611660653.jpg

        2、String类是final修饰了,被称为不可变字符串,所以这里String类型的值就是字符串常量!但是同学需要注意字符串是比较特殊的,并不是所有的类的值都有常量哦!

        3、  String str="imooc"  是从字符串常量池中拿到“imooc”,然后把它赋值给str,这里是在实例化一个对象,因为这个String非常之常用。所以这里底层做了处理。使其可以像基本类型一样的被赋值。但它实际上是一个引用类型。这里是比较特殊的哦

            1)字符串常量池,顾名思义,就像有一个大池子,里边有你常用的字符串。

                比如:String str="imooc" ;就是从字符串常量池中,直接把常量池中的"imooc"赋值给str。(池子中还没有"imooc"的话,会先在池子中创建有一个"imooc",然后再赋值给 str。)

            这时String str1 = "imooc" 它们指向的是同一个字符串。

        2)虽然它类似于基本类型的赋值方法,是因为它非常常用,这里底层对它做了这个优化,并不是所有的类都有常量池哦!

        如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 鱼儿0001 #1
    谢谢老师的耐心回复。关于String str="imooc";这个代码还是不懂,既然它是在实例化对象,又怎么会跟常量有关系,真的不能理解啊。。。。。"imooc"难道不是传入的字符串信息吗?
    2019-06-25 12:04:43
  • 好帮手慕小班 回复 提问者 鱼儿0001 #2
    同学你好,String是一个特殊的类,如:String str="imooc" ;就是从字符串常量池中,直接把常量池中的"imooc"赋值给str(但如果池子中还没有"imooc"的话,会先在池子中创建有一个"imooc",然后再赋值给 str。),这里理解这种特殊的赋值形式即可。 如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
    2019-06-25 14:56:57
好帮手慕小班 2019-06-23 16:37:13

        同学你好,1)、对象池(也是缓存区)就是在堆上开辟的内存,用new产生的对象都在这个区域开辟空间存储。

            常量池是用来存放字符串常量和基本类型常量。

        2)、这里并没有扩展代码,就像声明一个变量,然后赋值一样,只是String类型的数据是常量。例如:String str1="imoc";  在栈中声明str1   因为String类型是常量,所以在常量池中声明imoc

                String  str2="imoc";  在栈中声明str2,常量池已存在imoc,直接将"imoc"的地址指向str2

       如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~



  • 提问者 鱼儿0001 #1
    谢谢老师的耐心回复。1、在包装类中,自动装箱,如:Integer a=22;实际的扩展代码是:Integer a=Integer.valueOf(22);,将new好的对象存放在对象池,下次还有同样存储22数值的对象,就不用创建,可以直接调用前面创建好的对象。老师,这跟常量池没有关系吗?2、String是一个类,你说String类型的数据是常量,例如:String str1="imoc";老师,我不懂啊,String是类,它只有对象,哪里来的常量?要是类都能有常量,我随便设定一个类,都能给类赋值了。3、String str1="imooc";这怎么理解啊,这到底是不是在创建对象啊,我都被老师说的String类有常量给弄糊涂了。。
    2019-06-24 14:01:13
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师