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还好理解。
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还好理解。
解决方案 »
- 关于double类型
- 我配置的事务,发生异常不能回滚,请求帮助
- httpclient 乱码问题
- 为什么jList_valueChanged的方法被调用两次?
- 有人在Red hat linux7.3下面用过jxl(Java Excel API)吗?我在Windows下面没问题,Linux下面就不行了。
- 怎么设置编码问题?
- java里怎么创建数据库????具体步骤是哪些?????
- 主 题: win2000server装了JAVA1.2.1后,老是提示,在使用中插拔了硬件,蓝屏死机
- 谁来总结环境变量一下……
- 怎样让文本框获得焦点,而不是靠鼠标来点击它???
- 安装后出了这个东西呀,有请了呀
- 对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。"请大家给解释一下"
{
sb=sb+'*';
}sb只是一个引用 指向一个String对象
sb = sb+'*',做着个运算时
sb 所指向的那个String不能变 ,但是sb只是一个引用,可以指向另外一个对象,
String不能变,和sb不能变是两回事
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楼所说。