黑马程序员技术交流社区

标题: String类 [打印本页]

作者: \(^o^)/    时间: 2014-6-21 22:08
标题: String类
本帖最后由 \(^o^)/ 于 2014-6-23 21:27 编辑

                String str="sdf";
                str="s";
                System.out.println(str);
不是说字符串一被初始化赋值就不能改变,为什么打印出来的是s
作者: z-翔    时间: 2014-6-21 22:26
字符串并没有变
而是str的指向变了
指向了s这个字符串
而sdf还是那个sdf
这让我想起了一首诗《见或不见》...
作者: 江夷    时间: 2014-6-21 22:27
这里说的是字符串对象,"sdf"这个字符串对象赋值后就不会再改变,而str =“s”,则将引用类型str指向了“s”的角标值
作者: 帅哥哥    时间: 2014-6-22 16:55
“sdf”和“s”都在常量池里边,str在栈中,可以指向不同的字符串常量
作者: 杨殿生    时间: 2014-6-22 19:03
str的引用改变了 他指向了s所以打印的是s
作者: 波涛    时间: 2014-6-22 19:52
是的,字符串sdf还是sdf没有变,只是不被str所指了,str去指向了另外的字串s
作者: 踏雪风暴    时间: 2014-6-22 19:58
字符串一被初始化赋值就不能改变,是这样的,但问题不是这个
                String str="sdf";
                [img]str="s";
                System.out.println(str);
由于String的特点,"sdf"和"s"是两个对象,可以理解为堆内存中两个不同地址的对象,而栈内存的str 先是指向"sdf"。后来由 str="s";  指向了"s"


无标题.png (36.32 KB, 下载次数: 33)

无标题.png





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