A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© \(^o^)/ 中级黑马   /  2014-6-21 22:08  /  1098 人查看  /  6 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 \(^o^)/ 于 2014-6-23 21:27 编辑

                String str="sdf";
                str="s";
                System.out.println(str);
不是说字符串一被初始化赋值就不能改变,为什么打印出来的是s

6 个回复

倒序浏览
字符串并没有变
而是str的指向变了
指向了s这个字符串
而sdf还是那个sdf
这让我想起了一首诗《见或不见》...

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 想起诗给你个赞!

查看全部评分

回复 使用道具 举报
这里说的是字符串对象,"sdf"这个字符串对象赋值后就不会再改变,而str =“s”,则将引用类型str指向了“s”的角标值
回复 使用道具 举报
“sdf”和“s”都在常量池里边,str在栈中,可以指向不同的字符串常量
回复 使用道具 举报
str的引用改变了 他指向了s所以打印的是s
回复 使用道具 举报
是的,字符串sdf还是sdf没有变,只是不被str所指了,str去指向了另外的字串s
回复 使用道具 举报
字符串一被初始化赋值就不能改变,是这样的,但问题不是这个
                String str="sdf";
                [img]str="s";
                System.out.println(str);
由于String的特点,"sdf"和"s"是两个对象,可以理解为堆内存中两个不同地址的对象,而栈内存的str 先是指向"sdf"。后来由 str="s";  指向了"s"


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

无标题.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马