string 赋值问题

易企加_天马行空 2009-06-02 02:20:22
加精
string a = “adfasdf”;这个会重新new一个string对象,
string b = a;b也会重新new一个string对象吗?
...全文
3332 295 打赏 收藏 转发到动态 举报
写回复
用AI写文章
295 条回复
切换为时间正序
请发表友善的回复…
发表回复
guoqing2009 2010-04-15
  • 打赏
  • 举报
回复
类似引用
Flavoring 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 dancingbit 的回复:]
string a = "this is a";
string b = a;
b = "this is b";
Label1.Text = a;

猜猜Label1.Text的值是啥?
[/Quote]
别把变量当指针,别人不会傻到这个地步

king_wen 2010-04-15
  • 打赏
  • 举报
回复
菜鸟来报道
salamchui 2010-04-15
  • 打赏
  • 举报
回复
不看还清楚,越看越糊涂!!
kuoma 2010-04-15
  • 打赏
  • 举报
回复
引用类型,不会!!
zs82891879 2010-04-15
  • 打赏
  • 举报
回复
会的。。无论是值类型还是引用类型声明了变量之后就会在栈上开辟一个空间
如果是值类型,其值存放在栈上
如果是引用类型栈上存放引用(地址),指向堆上的值
所以b在栈上的引用指向堆上的a(实例)
wxm3630478 2010-04-15
  • 打赏
  • 举报
回复
https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/19.gif

汗啦。。。。。。那一年的帖子被 翻出来啦。
onenewsmile 2010-04-15
  • 打赏
  • 举报
回复
引用类型,不会!!
xiaosima2017 2010-04-15
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
//赞同创建新对象
string a = "zhang";//创建一个字符对象,创建了内存对象大家应该公认了是吧?
string b = a;//有创建一个字符对象把a的字符串赋给了b
Console.WriteLine("a ={0},b ={1}",a ,b );//此处输出“a=zhang,b=zhang”
a = "hai";
Console.WriteLine(a);//此处也输出“hai”
//菜鸟猜测,C++里面有指针, C#中因为安全问题去掉了指针,我看到大多说会的是用的C#的,而说不会的是C++的,据我个人分析可能语言不同结果不同吧。
Console.ReadLine();
}
}
}
xiaosima2017 2010-04-15
  • 打赏
  • 举报
回复
shixiujin 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 ojlovecd 的回复:]
想知道会不会,试一下就知道了

C# code

string a = "ojlovecd";
string b = a;
Console.WriteLine(a == b);
Console.WriteLine((object)a == (object)b);



输出当然是T……
[/Quote]
同意楼上这位仁兄的高见,将a,b都转换为object类型进行==运算符的比较是非常贴切的.
新溪-gordon 2010-04-15
  • 打赏
  • 举报
回复
wxm3630478 2010-04-15
  • 打赏
  • 举报
回复
不会

string 是个特殊的引用类型,就是即有引用类型的特点,有与之有差别....

string a = “adfasdf”;
string b = a; ------string 是引用类型,所以不会重新创建string对象

string为什么是特殊的引用类型,和其他的引用类型有什么区别

a = "tyuiop"; ----重新个a赋值,这里是重新创建一个string对象,而不是该变原来的值

MessageBox.Show(b); //b还会输出adfasdf

----如果用引用类型的特点来看,原本改变了a的值,那么b的值也是应该跟着改变的...但是改了a的值,b却还是原先的值,没发生改变.....这就是为什么"string 是一个特殊的引用类型"
liusha20091227 2010-04-15
  • 打赏
  • 举报
回复
有人说会有人说不会,我现在都糊涂了
ldj299 2010-04-15
  • 打赏
  • 举报
回复
我的分啊!
mikebai 2010-04-15
  • 打赏
  • 举报
回复
mark..........
  • 打赏
  • 举报
回复
答案是会的,除非你用一个可改变字符串
就是StringBuilder 这个对象是动态对象,允许扩充它所封装的字符串中字符的数量,但是您可以为它可容纳的最大字符数指定一个值。此值称为该对象的容量,不应将它与当前 StringBuilder 对象容纳的字符串长度混淆在一起。例如,可以创建 StringBuilder 类的带有字符串“Hello”(长度为 5)的一个新实例,同时可以指定该对象的最大容量为 25。当修改 StringBuilder 时,在达到容量之前,它不会为其自己重新分配空间。当达到容量时,将自动分配新的空间且容量翻倍。可以使用重载的构造函数之一来指定 StringBuilder 类的容量。
Joe-xXx 2010-04-15
  • 打赏
  • 举报
回复
string a = “adfasdf”;这个会重新new一个string对象,
string b = a;b也会重新new一个string对象吗?

不会重新分配内存空间,这是把指向“adfasdf”的地址给了b。

这叫字符串的驻留或拘留~~而且是进程级别的!

去Google一下相关的知识吧~
Dhoopu 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用 216 楼 hobinly 的回复:]

会的,string 是值类型,不是引用类型。
就跟int a=19;int b=a;
b是重新分配空间的。
[/Quote]

这位哥哥,string是引用类型!!!!!!!!!
nashina 2010-04-15
  • 打赏
  • 举报
回复
应该是要重构的;

如果不想重构,可以使用类String或者StringBuilder;
加载更多回复(268)

110,544

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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