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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李小丰 黑马帝   /  2012-2-6 14:23  /  2759 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如代码
String s=aaa;
s=s+bbb;
s所指向的对象改变了吗?

评分

参与人数 1技术分 +1 收起 理由
admin + 1 不懂就问,要的就是这态度

查看全部评分

10 个回复

倒序浏览
改变了。

字符串属于一个常量,在内存中一旦被初始化就不能改变,
楼主你的意思应该是:s=s+"bbb";
当字符串s在后面加上了字符串“bbb”时,原来的字符串对象“aaa”在堆内存中是不会改变的,而是重新在堆内存中创建了以个字符串“aaabbb”的对象。并将新创建的对象的首地址值赋给了s;
即s此时指向了一个新的字符串对象"aaabbb".

评分

参与人数 1技术分 +1 收起 理由
admin + 1 赞一个!

查看全部评分

回复 使用道具 举报
S指象的对象当然改变了。String是属于一个常量。。s=s+bbb;相当于调用了stringbuffer类对字符串进行了增加。最要S是指向aaabbb。其中创建了多个string对象。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
string类被定义成final类型,一旦创建就不能修改,只能在堆中另创建另一个对象了,所以定义s=s+bbb;,s指向aaabbb这个对象

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
s指向的对象肯定改变了。
s = s + "bbb";这个语句执行后就新创建了对象"aaabbb",并把存储这个对象的地址传给了s.
而原先String s = "aaa";创建的对象依然还存在内存当中,并没有什么改变。重要的是要知道这是两个不同的对象。
回复 使用道具 举报
首先,你应该所写的代码应该是String s = "aaa";s=s+"bbb";如果不加""编译就不能通过,因为你定义的是一个String类型。还有就是s所指向的对象当然改变了,起初s所指向的对象是字符串"aaa",然后s=s+"bbb";语句过后,字符串"aaabbb"就传递给了引用变量s,其s所指向的对象就变成了字符串"aaabbb";

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
使用:
  System.out.println(s);
测试一下就知道了。
回复 使用道具 举报
  貌似楼主代码有误,String s="aaa"; s += "bbb";
             String s= "aaa" :这个s是指向"aaa"在内存的地址.
              s += "bbb"      :这个是在内存中新开一片内存、在重新把"aaabbb"的内存地址赋值给s
所以s所指的内存地址是改变了的。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
S所指的对象变了。
回复 使用道具 举报
String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
String 类在java中的定义public final class String,是常量;它们的值在创建之后不能更改。

当字符串s在后面加上了字符串“bbb”时,原来的字符串对象“aaa”在堆内存中是不会改变的,而是重新在堆内存中创建了以个字符串“aaabbb”的对象。并将新创建的对象的首地址值赋给了s;
即s此时指向了一个新的字符串对象"aaabbb".


评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
同学,以后遇到这样的问题你可以这样做!
首先你的代码问题:String s=“aaa”;s=s+“bbb”;
我不知道你说的对象是什么意思;如果你说的是值的话那么一定是变了!因为一个是aaa,一个是aaabbb嘛。
如果你说的是地址的话:是这样aaa的地址肯定不会变!,就算你做了s=s+"bbb"' aaa的地址也不会变!因为初始化的地址是不变的!但是在生成这样字符串"aaabbb"时,内存会给他一个新的地址!为什么:你肯定会想直接加在后面不就得了,干嘛还要找个新的地方!很简单:因为以前那个地址所拥有的空间不够大,初始化的空间不会变!它放不下那么多的东西呀!所以我们要找一个更大的空间呀!然后再放aaabbb!最后s指向新的地址!s的地址变了!我想这也是在字符串空间没有减这一运算的原因吧!这是我的理解。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

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