栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

关于不同方法创建String对象时到底创建了多少个对象

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于不同方法创建String对象时到底创建了多少个对象

以下代码共创建了几个对象?(4)

String s= "abd";//1

String s1=new String("hello");//2

String s2=new String("hello");//1

String s3=s1;

String s4=s2;

解析:

String s= "abd";

        在String池开辟一个新空间存储字符串"abd",即在存储空间的String池

中创建一个字符串对象 "abd",仅创建单个对象。

(*)String s1=new String("hello");

        一共在两处内存地址开辟空间,共创建了两次对象。首先是在使用new关键字的时候在堆内存开辟空间存储new出来的String对象,接着由于此String对象内需要存储"hello"字符串,但由于String池中没有,所以接着会在String池中再次开辟一段新的空间存储字符串"hello",即在存储空间的String池中创建一个字符串对象"hello"。堆内存创建的String对象加上String池中创建的String对象一共创建两个对象。

 

String s2=new String("hello");

        在使用new关键字的时候在堆内存开辟空间存储new出来的String对象,接着由于此String对象内需要存储"hello"字符串。然而在此行代码之前上一行代码已在String池中创建对应的String字符串对象所以此次只需要在堆内存创建一次String对象而不需要在String池中再次创建对象,所以只创建了一个对象。

 

String s3=s1;

String s4=s2;

        并未创建对象,s3,s4分别引用了s1,s2对象内存储的对象地址,并没有为其单独分配内存所以没有创建对象。

 

知识拓展:

无论釆用哪种方式创建对象,Java 虚拟机在创建一个对象时都包含以下步骤:

        给对象分配内存。

        将对象的实例变量自动初始化为其变量类型的默认值。

        初始化对象,给实例变量赋予正确的初始值。

        

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1036651.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号