黑马程序员技术交流社区

标题: String到底变了没? [打印本页]

作者: 郝妮娜    时间: 2011-9-23 20:12
标题: String到底变了没?
如代码
String s=Hello;
s=s+World;
s所指向的对象改变变了吗?
作者: 匿名    时间: 2011-9-23 20:39
标题: 希望帮到你
String s="hello"; 这句中的s与s=s+"world"; 中的第一个s并不是同一个对象,而是分配在2块内存中的两个不同对象
可以说每一个String对象,都是不同的内存空间
作者: 黄锋    时间: 2011-9-23 22:12
楼主的s变量的指向的对象是没有改变的,内存地址也是不变,String是引用类型,下面我给你个示例
希望你能看懂
String s="Hello";
String s1="Hello";
System.out.println(s==s1);//true
这样输出是true,也就是说变量s和s1存储的内容也是地址,但却都是方法区常量池中"Hellp"所在的地址
String s2=new String("Hello");
String s3=new String("Hello");
System.out.println(s2==s3);//false
变量s2和s3储存的内容是JVM在堆中开辟的两个String对象,==比较就是两个不同地址
作者: 匿名    时间: 2011-9-23 22:41
应该改变了的,s=s+word的S其实指向的内存中为''helloword''分配的内存,而原来的S指向内存分配给的"hello"将被删除!
作者: 匿名    时间: 2011-9-25 18:54
懂啦,谢谢各位
作者: 匿名    时间: 2011-9-25 22:00
改变了,第一次定义 String s=“Hello”,会在内存中一个叫‘字符池’的地方,放入“Hello”,当下次再用这个字符时候,就直接从这个字符池中查找;s=s+“World”,重新创建了一个变量,同样的在‘字符池’中放入该字符串,下次再用时候,直接从该‘字符池’中找。




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