昨天看到有些帖子问关于string的问题,才发现我是多么的无知,把string看成和int等一样的,简单的数据类型。
那么现在有个问题:MSDN记录阐述的是string一旦赋值,那么它将永恒不变,所谓的改变,也只是改变了其引用的,地址中的值将不会变,只是改变了之后原地址中的值没人引用它了罢了,同时,假设有string x="hello"; string y="hello";那么,其实在内存中只有一块hello,x和y同时指向它罢了,不知道我的理解是否正确,那么现在的问题是:
若:string x="hello";
string y="hel";
y+="lo";
这样的话,x和y事什么关系呢??还是上面的那个假设吗?
那么现在有个问题:MSDN记录阐述的是string一旦赋值,那么它将永恒不变,所谓的改变,也只是改变了其引用的,地址中的值将不会变,只是改变了之后原地址中的值没人引用它了罢了,同时,假设有string x="hello"; string y="hello";那么,其实在内存中只有一块hello,x和y同时指向它罢了,不知道我的理解是否正确,那么现在的问题是:
若:string x="hello";
string y="hel";
y+="lo";
这样的话,x和y事什么关系呢??还是上面的那个假设吗?
解决方案 »
- datatable remove移除列问题。
- c#获取外部程序的某个按钮句柄并触发点击事件?
- c#定时器无效了?
- 实现TableLayoutPanel鼠标拖动各行间分割线使改变行的高度
- 安装C#2008后,怎样使用sql server数据库?
- 用c#从oracle中如何导出数据到foxpro的dbf表中
- ---------///一个结构函数的问题////------------------
- 在哪里可以下载到Visual Studio Tools for Office?
- C# 在线连续运行程序 15天退出
- 谁能告诉我在c#中上下左右键的代码是多少?
- 3.5的框架安装起来非常慢,如何解决?
- C# Winform下Excel格式设置问题
==========>
这是谁告诉你的?
如果是这样,每声明一个string,程序都要去搜索内存中所的String,比较值是否相同,但是这个比较的时候就需要先声明一个String要不怎么比较?
string b = "a";
string.ReferenceEquals(a,b)就可看到效果
新建一个字符串以后,将为其分配内存,而之后有值和其相同的字符串不会被创建分配堆而是直接分配其引用
确实是指在一块内存的,string在托管堆中是维护在hasttable中的,每次重新申明一个String的时候,首先检查这个hashtable中是否已经存在了相同的String内容,如果有,则指向同一块堆内存,如果没有,那么重新申请堆内存,并且将新的string存入Hashtable.string a = "a";
string b = "a";
此时string.regerenceEquales(a,b)返回True但是如果再来一句
b= "c";
那么重新分配内存。
但是我又想说,某些人不怎么清楚,你写个学习也好,但不要误导,谢谢,这是罪过
对string做连接运算,必须创建一个新的字符串对象,拷贝进来,然后丢弃原来的。
要想连接运算,用StringBuilder类。