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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 风色月下 中级黑马   /  2016-4-26 22:09  /  611 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String   s= "abc"   s="bcd"    是不是字符串被更改

10 个回复

倒序浏览
不是字符串被改了,字符串是无法再改变的。是引用指向被改了。
回复 使用道具 举报
是的,对的!懂
回复 使用道具 举报
不是 指引变了
回复 使用道具 举报
你用hashcode()这个方法检验下!我试过,是内存地址变了!
回复 使用道具 举报
字符串作为一个对象 实际上语句是这样的
String s =“abc”; //由于基本数据类型是一个基本数据类型特殊包装类存在 拥有着自动装箱的特性 他的代码完整是这样的 String s=new String("abc"); 除了stringbuffer stringbuilder不是以外 字符串变量所引用的对象都是一个新的字符串 只是自动装箱了 少写了上部分代码 new的就是在堆内存中 新建一个空间 内容为abc 将地址返回给s进行引用
s=“bcd”;//所以呢 这一段是s=new String("bcd");  所以呢   这段是新建的
回复 使用道具 举报
yxpzzl 中级黑马 2016-4-27 00:45:02
7#
字符串是常量,无法再改变的。是引用指向s被改了。
回复 使用道具 举报
final类不能被改变,引用变了而已
回复 使用道具 举报
首先创建了一个对象S,然后再常量池里面创建了一个abc,然后S指向了这个abc的地址。
然后又在常量池里面创建了一个bcd,然后S又指向了bcd的地址。
现在常量池里面有2个常量 abc 和 bcd ,所以只是s指向了其他的地址,而具体的字符串没有改变,而是重新创建了一个
回复 使用道具 举报
不能改变
回复 使用道具 举报
不是,字符串是引用类型,是对象存在于堆内存,你这种情况是把s这个引用指向了"bcd"这个对象,但是"abc"这个对象还是存在于堆内存的,只是没有引用去引用它了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马