黑马程序员技术交流社区

标题: string 的一个小问题 [打印本页]

作者: 风色月下    时间: 2016-4-26 22:09
标题: string 的一个小问题
String   s= "abc"   s="bcd"    是不是字符串被更改
作者: yunmu    时间: 2016-4-26 22:16
不是字符串被改了,字符串是无法再改变的。是引用指向被改了。
作者: ruijin    时间: 2016-4-26 22:32
是的,对的!懂
作者: 320215787    时间: 2016-4-26 22:36
不是 指引变了
作者: 钱金磊    时间: 2016-4-26 23:48
你用hashcode()这个方法检验下!我试过,是内存地址变了!
作者: huaihkiss    时间: 2016-4-26 23:59
字符串作为一个对象 实际上语句是这样的
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
字符串是常量,无法再改变的。是引用指向s被改了。
作者: 长衫造纸农_    时间: 2016-4-27 08:36
final类不能被改变,引用变了而已
作者: zhoutianxing    时间: 2016-4-27 20:59
首先创建了一个对象S,然后再常量池里面创建了一个abc,然后S指向了这个abc的地址。
然后又在常量池里面创建了一个bcd,然后S又指向了bcd的地址。
现在常量池里面有2个常量 abc 和 bcd ,所以只是s指向了其他的地址,而具体的字符串没有改变,而是重新创建了一个
作者: feijiaqi    时间: 2016-4-27 21:16
不能改变
作者: 奉建兵    时间: 2016-4-27 22:32
不是,字符串是引用类型,是对象存在于堆内存,你这种情况是把s这个引用指向了"bcd"这个对象,但是"abc"这个对象还是存在于堆内存的,只是没有引用去引用它了




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