黑马程序员技术交流社区

标题: 字符串问题 [打印本页]

作者: Jarc    时间: 2016-9-14 15:29
标题: 字符串问题
String s = new String( xyz );创建了几个String Object?
作者: 383412263    时间: 2016-9-14 15:38
一个或者两个
常量缓冲区的字符串,这个是永远不变的,但是如果该字符串在此之前已经被引用过,那么这里的new String("xyz")只会创建一个对象,而我们在讨论这个问题的时候通常都是隐式的以字符串从未被引用过为前提,这是一个陷阱

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

如果字符串从未被引用过(即缓冲区根本没有xyz),那么首先会在常量缓冲区创建一个xyz的字符串对象,并且该对象永远存在直至jvm结束,然后再创建new string的对象,而这个对象仅仅是引用xyz

作者: haoge349    时间: 2016-9-14 21:26
回复中受益匪浅...
作者: dydwjc    时间: 2016-9-14 23:59
两个,堆内存一个new,  常量池一个xyz
作者: 天天图蓝    时间: 2016-9-15 00:50
创建了两个,常量池中的xyz,和堆内存中的String对象
作者: taozhihui    时间: 2016-9-15 01:11
创建了两个对象啊
作者: SunCowbee    时间: 2016-9-15 01:38
创建了俩,再仔细看看上课的视频,有个内存图我记得




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2