String sb=new String();和sb=sb+'*';的一些理解

handsome1234 2006-03-27 09:13:22
String sb=new String();
for (int j=0;j<w;j+=)
{
sb=sb+'*';
}


我想sb=sb+'*';应该会报错的sb是String常量,是不能修改的,但是为什么却又通过了编译???
有人说每执行sb=sb+'*'都会生成一个新的sb,这是为什么呢?前面已经有了sb这里为什么还要每次都生成新的sb呢?如果是下面的还好理解:
for (int j=0;j<w;j+=)

String sb=new String();
sb=sb+'*';
}每次生成的新的sb还好理解。
...全文
176 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
today913 2006-03-29
  • 打赏
  • 举报
回复
在java中String是不能被改变的,实际上java在执行字符串操作的时候进行了下列操作:
String s1="hello";
String s2="world";
int i=2;
String s=s1+s2+i;//实际上java会这样操作:
//new StringBuffer().append(s1).append(s2).append(i).toString();
String是不能被改变的,所以需要创建一个StringBuffer,StringBuffer是可以被改变的。
楼主的sb变化了,是因为每次循环之后sb都指向了一个新的StringBuffer.如2楼所说。
lyazure 2006-03-29
  • 打赏
  • 举报
回复
要分清对象和对象的引用.字符串对象本身不变不意味着字符串的引用不能变.进行new操作或者对字符串的连接操作每次都将生成新的字符串对象并返回其引用,这个引用是可以赋给任一字符串对象的引用.
cocosunshine 2006-03-29
  • 打赏
  • 举报
回复
String类型不能改变,sb只是一个String类型的对象,所有对象都是引用,当+*的时候,sb对象把指针指向其它的引用了。每次赋值的确会生成新的对象,但是这个对象不是sb
hemiao_1993 2006-03-29
  • 打赏
  • 举报
回复
如果想让引用sb也不变, 可以加上final关键字, 它就指不了别的对象了.
gd0371 2006-03-29
  • 打赏
  • 举报
回复
2楼解释的很正确呀!
chg2008 2006-03-27
  • 打赏
  • 举报
回复
这两段程序完全不一样,没什么可比性
interpb 2006-03-27
  • 打赏
  • 举报
回复
for (int j=0;j<w;j+=)
{
sb=sb+'*';
}

sb只是一个引用 指向一个String对象
sb = sb+'*',做着个运算时
sb 所指向的那个String不能变 ,但是sb只是一个引用,可以指向另外一个对象,
String不能变,和sb不能变是两回事


62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧