黑马程序员技术交流社区

标题: 再提String赋值问题,意想不到 [打印本页]

作者: 黄玉昆    时间: 2013-2-10 03:23
标题: 再提String赋值问题,意想不到
本帖最后由 黄玉昆 于 2013-2-11 18:13 编辑

String s1 = "abc";  
String s2 = new String("abc");
这两句代码互换位置有什么不同

[hide=d100]
翻阅相关资料,才发现有些不同点:
对于上面的代码,有一点要说的:就是无论String s2 = new String("abc")在s1前面写还是后面写,s2都会检查StringPool中是否有"abc",
若有,就直接在堆内存中创建一个对象;若没有,则要先在StringPool中创建"abc"后,再在堆内存中创建一个对象。[/hide]

具体请看我对String的总结:http://blog.csdn.net/shengfeixiang/article/details/8577842



作者: 刘明杰    时间: 2013-2-10 18:09
{:soso_e103:}现在是见证奇迹的时候
作者: 刘明杰    时间: 2013-2-10 18:10
本帖最后由 刘明杰 于 2013-2-10 18:13 编辑

{:soso_e103:}我也顺便说一下,这是字符串的一个特性。 字符串池吧
作者: 陈圳    时间: 2013-2-11 11:32
互相位置有什么不同呢?
作者: 炉海佳    时间: 2013-2-11 11:50
不回看不到就回吧
作者: 0.00    时间: 2013-2-11 12:53
这个隐藏纠结,看看
作者: 黑马吕世成    时间: 2013-2-11 17:02
看看内容。
作者: 李培根    时间: 2013-2-11 17:59
s2在上面是创建两个对象,在下面创建一个对象。张孝祥老师总结过的。
作者: 黄玉昆    时间: 2013-2-11 18:12
李培根 发表于 2013-2-11 17:59
s2在上面是创建两个对象,在下面创建一个对象。张孝祥老师总结过的。

嗯,你说的没错。我觉得吧,s2很不消停,不管在上下,都会有两个对象产生,“池子”里一个,堆里一个。不过,这是对内存的一种优化,是一个好处。




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