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

© Jarc 高级黑马   /  2016-9-14 15:29  /  470 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String s = new String( xyz );创建了几个String Object?

9 个回复

倒序浏览
一个或者两个
常量缓冲区的字符串,这个是永远不变的,但是如果该字符串在此之前已经被引用过,那么这里的new String("xyz")只会创建一个对象,而我们在讨论这个问题的时候通常都是隐式的以字符串从未被引用过为前提,这是一个陷阱

如果字符串从未被引用过(即缓冲区根本没有xyz),那么首先会在常量缓冲区创建一个xyz的字符串对象,并且该对象永远存在直至jvm结束,然后再创建new string的对象,而这个对象仅仅是引用xyz
回复 使用道具 举报
你应该是问
String s = new String(“xyz”);此处创建两个String对象,一个是常量池中的,一个在堆内存中,是常量池的一个副本对象!
回复 使用道具 举报
常量池有一个字符串,然后再实例化一个String的对象
回复 使用道具 举报
一个或者两个
常量缓冲区的字符串,这个是永远不变的,但是如果该字符串在此之前已经被引用过,那么这里的new String("xyz")只会创建一个对象,而我们在讨论这个问题的时候通常都是隐式的以字符串从未被引用过为前提,这是一个陷阱

如果字符串从未被引用过(即缓冲区根本没有xyz),那么首先会在常量缓冲区创建一个xyz的字符串对象,并且该对象永远存在直至jvm结束,然后再创建new string的对象,而这个对象仅仅是引用xyz
回复 使用道具 举报
回复中受益匪浅...
回复 使用道具 举报
dydwjc 中级黑马 2016-9-14 23:59:40
7#
两个,堆内存一个new,  常量池一个xyz
回复 使用道具 举报
创建了两个,常量池中的xyz,和堆内存中的String对象
回复 使用道具 举报
创建了两个对象啊
回复 使用道具 举报
创建了俩,再仔细看看上课的视频,有个内存图我记得
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马