c#中说string声明的字符串是固定的,为什么我在.net开发时可以对其更改那?

[复制链接]
查看11 | 回复4 | 2010-9-18 19:25:09 | 显示全部楼层 |阅读模式
String sql = "select * from [T_RuKu] where MingCh='" + Convert.ToString(Ds.Tables[0].Rows[0]["MingCh"]) + "'";

if (Ds.Tables[0].Rows.Count >= 2)

{

for (int i = 1; i < Ds.Tables[0].Rows.Count; i++)

{

sql += "or MingCh='" + Convert.ToString(Ds.Tables[0].Rows["MingCh"]) + "'";

}

}
看上面的代码,是我在用.net做b/s管理系统时用到的,明明是可以更改的嘛,是我理解错了吗?望高手指点!
谢谢了,一语点醒梦中人。如果我不停的通过sql+某些字符串,岂不是一次分配一定内存空间分配了好多内存啊,那是不是这是就要用stringbuilder好一些啊

回复

使用道具 举报

千问 | 2010-9-18 19:25:09 | 显示全部楼层
String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。
通过用一个重载的构造函数方法初始化变量,可以创建 StringBuilder 类的新实例,正如以下示例中所阐释的那样。
回复

使用道具 举报

千问 | 2010-9-18 19:25:09 | 显示全部楼层
string是固定的,意思是:比如说:你声明一个string sql="a";这个"a"就会在内存的string常量池中存放,这个"a"是不变的;如果你再进行这个操作,sql="b",这时就会在内存的string常量池中再创建一个"b",这个b也是不变的其实,sql只是一个引用而已,他是指向内存中的地址,并不是他不能变,而是说后面的值不能变,也就
回复

使用道具 举报

千问 | 2010-9-18 19:25:09 | 显示全部楼层
就是说你所使用的只是某个内存地址的引用。在该地址中内存中的内容是不变的。变化的只是你使用的地址变了。
回复

使用道具 举报

千问 | 2010-9-18 19:25:09 | 显示全部楼层
在重新定义一个string 的变量想加不就可以了吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行