黑马程序员技术交流社区

标题: String中的一个问题 [打印本页]

作者: 赵磊    时间: 2011-7-20 12:30
标题: String中的一个问题
String s="hello";s=s+"word!";这两行代码执行后,原始的String对象中的内容改变了没有?
作者: 匿名    时间: 2011-7-20 13:10
原始的String对象内容没有改变 !!不过随后会被垃圾回收器回收。
String s="hello",这里产生一个hello对象。
在执行s=s+"world"时,首先将s包装成StringBuilder对象变成:
s=new StringBuilder(s).append(“world”);这个操作是jvm自动做出的决定,这样将会大大增加运行的效率,同时也节约了空间。
作者: 李海涵    时间: 2011-7-20 13:18
[code=java]public class TEST {
public static void main(String[] args)
{
         String s="hello";
         System.out.println(s);
         s=s+"word!";
         System.out.println(s);
         
        }
}[/code]输出结果:
hello
helloword!


原始的String对象中的内容没了,被重新写入了。
[ 本帖最后由 lihaihan 于 2011-07-20  13:24 编辑 ]
作者: 匿名    时间: 2011-7-20 15:17
原来的没变。string s="hello";这样定义的hello应该是放在data 内存中,将内存地址赋给s。data中开辟了两个存储空间,一个放hello,一个放hello world,只不过s=hello world后,s中放的已经不是hello的内存地址了,是hello world的了,但两字符串仍都存在在内存空间中。
作者: 匿名    时间: 2011-7-20 15:47
对字符串对象进行操作时,java虚拟机在函数内部对字符串进行了特殊的处理视string对象为常量,对传进来的引用地址所引用的对象不能直接进行操作而是产生一个副本对其进行操作,所以原始对象不会改变。




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