创建字符串的过程理解2

创建字符串的过程理解2

首先感谢老师有了新的讨论结果然后告诉我,让我重新查看了之前的问题,有了新的感悟

问题描述:还是以这个图为例

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

这是之前老师的回答

http://img1.sycdn.imooc.com//climg/602340850952a2ab06950350.jpg

问题一:就第一点,创建一个imooc,但是不会进行实例化,这个我不太明白,String str = "imooc" 那肯定是一个实例对象吧,这是我的理解

问题二:就第三点老师的回答,而是根据实例化传递的参数进行实例化,那么问题来了,实例化传递的参数,参数是一个字符串,那么如果是一个字符串,那必定是一个对象,就以“imooc”为例,我如果常量池中有,那么这个当做参数的“imooc”是不是指向就是常量池中的“imooc”

尝试过的解决方式:

本来我想使用继承的方式观看,参数的内存地址值,但是发现String是个不能被继承的类,那就没办法去观察了,望老师解惑

正在回答

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

1回答

同学你好,1、

    1)先了解一下什么是实例化?

    实例化:对象也是引用数据类型,只能使用new运算符从堆中分配内存。使用已经定义好的类,创建该类对象的过程称为“实例化”。也可以理解为,通过new关键字创建的对象为实例化。

    2)综上所述,所以String str = "imooc"并没有进行实例化,而是进行了一次赋值。

2、同学理解有一点偏差,常量池与堆是两个地址,并没有进行关联。在String对象实例化时(String s = new String(“imooc”)),是根据参数进行创建的。

    ​实例化时,会先在堆中创建,然后去常量池中看一下,如果常量池中没有,就在常量池中放一份,如果有,在常量池中就不放了(和堆中的地址不一样)。如下图所示:

http://img1.sycdn.imooc.com//climg/602352fa09b46a3605430439.jpg

祝学习愉快!

  • WittChen 提问者 #1

    明白了,谢谢老师

    2021-02-10 11:32:58
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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