c# 中为什么说BigInteger是不可变的呢?
 BigInteger a = BigInteger.Parse("13454546656444999999999999999999999999999999999999999999999999999999");
         a = BigInteger.Add(a,a);
                    这样不就改变了a的值吗?

3个回答

因为内部实现上,大概类似
BigInteger Add(a)
{
return new BigInteger(当前值+a);
}
而不是
BigInteger Add(a)
{
当前值+a;
return this;
}
因此一个BigInteger建立起来,这个对象的状态就不会变了。

你的意思是 返回的是一个a的副本吗 就像传进去的是值类型而不是引用类型? 那使用 的时候要注意什么呢?

caozhy
回答这么多问题就耍赖把我的积分一笔勾销了 就是你不能改变一个创建的对象,好比DateTime、你说的String都是这样,但是你可以改变引用,指向新对象。
大约 4 年之前 回复

String类型每进行一次操作就会new一个新对象。String a ="name"是这样子的:new一个对象,内容是“name”,放在地址A1处,让变量a指向这个A1地址。a = "age":new一个新对象,内容是“age”,放在一个新地址A2,让变量a指向A2。结果打印出来的自然是“age”了。这个时候地址A1处的内容还是“name”,没有变(String为不可变字符串是指这个意思)。另外,这个时候地址A1处的对象(“name”)由于没有变量指向它(变量a已经指向A2),永远无法访问了所以变成了垃圾,等待系统回收。 应该是一个道理。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐