副本

weikeli19 2016-09-09 08:35:21
我想问一下:StringBuilder类里有一个方法叫Append(String) 它的解释是向此实例追加指定字符串的副本
我的问题是:(1)划红的这句话什么意思?
(2)副本又是什么意思?
...全文
194 13 打赏 收藏 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
白衣如花 2016-09-09
  • 打赏
  • 举报
回复
引用 12 楼 u012948520 的回复:
如果你有接触过C++,副本和“变量的引用”这一概念是一样的 可以当成:申请一块新内存,存放原有变量的值
不好意思,说错了,变量的引用是和副本相反的概念
白衣如花 2016-09-09
  • 打赏
  • 举报
回复
如果你有接触过C++,副本和“变量的引用”这一概念是一样的 可以当成:申请一块新内存,存放原有变量的值
我叫小菜菜 2016-09-09
  • 打赏
  • 举报
回复
引用 10 楼 weikeli19 的回复:
那小菜菜 我问你 副本的概念就是创建一个全新的对象是吗?
可以这么说,准确的说是:副本是从对象克隆一个一模一样的全新对象。
引用 9 楼 xuzuning 的回复:
我已经说了:那是画蛇添足 你把 向此实例追加指定字符串的副本 涂掉就可以了 string a = "abc"; string b = a; 这不就是传值吗?非要说 b 是 a 的副本也还可以说的过去 要是说 b 是 a 的新实例,就说不过去了吧?
版主说得对,值类型没有什么实例可言,微软之所以在MSDN文档里面说是实例,我个人认为这是一种泛化,即笼统说法。 比如int a=1;int b=1; 说a是int的一个实例,这是没问题的,int是类型,1是值(即实例)。但是说b是a的一个新实例,这就不对了。。。勉强可以说b是a的一个副本。 ------------------------ 一般描述为: 对象 是 类型 的实例。 对象a 是对象 b的 副本。
weikeli19 2016-09-09
  • 打赏
  • 举报
回复
引用 8 楼 zhi_ai_yaya 的回复:
深拷贝和浅拷贝。 浅拷贝即是引用,只是添加一个指针,指向当前对象,对象只有一个。 深拷贝,则是clone(克隆),也称创建副本等等,会把当前对象复制一份,成为一个一模一样的全新对象。深拷贝后会有2个独立的对象。 -------- StringBuilder类里有一个方法叫Append(String s) 它的解释是向此实例追加指定字符串的副本。 这句话的意思是:把字符串s的值克隆一份(可能是生成一个临时匿名值,也可能没有临时变量而是直接clone至缓冲区,具体看内部机制)并直接追加到StringBuilder缓冲区。
那小菜菜 我问你 副本的概念就是创建一个全新的对象是吗?
xuzuning 2016-09-09
  • 打赏
  • 举报
回复
我已经说了:那是画蛇添足 你把 向此实例追加指定字符串的副本 涂掉就可以了 string a = "abc"; string b = a; 这不就是传值吗?非要说 b 是 a 的副本也还可以说的过去 要是说 b 是 a 的新实例,就说不过去了吧?
我叫小菜菜 2016-09-09
  • 打赏
  • 举报
回复
深拷贝和浅拷贝。 浅拷贝即是引用,只是添加一个指针,指向当前对象,对象只有一个。 深拷贝,则是clone(克隆),也称创建副本等等,会把当前对象复制一份,成为一个一模一样的全新对象。深拷贝后会有2个独立的对象。 -------- StringBuilder类里有一个方法叫Append(String s) 它的解释是向此实例追加指定字符串的副本。 这句话的意思是:把字符串s的值克隆一份(可能是生成一个临时匿名值,也可能没有临时变量而是直接clone至缓冲区,具体看内部机制)并直接追加到StringBuilder缓冲区。
weikeli19 2016-09-09
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
辞海 对 副本 的解释:著作原稿以外的誊录本 字符串不是对象,所以 创建一个新实例 是不准确的
那该如何解释副本 请用计算机术语
xuzuning 2016-09-09
  • 打赏
  • 举报
回复
辞海 对 副本 的解释:著作原稿以外的誊录本 字符串不是对象,所以 创建一个新实例 是不准确的
weikeli19 2016-09-09
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
画蛇添足! 字符串本身就是传值的(复制的那一份就称副本) 被他那么一解释,似乎字符串在大多情况下都是传引用的了
那副本的意思就是创建一个新实例
weikeli19 2016-09-09
  • 打赏
  • 举报
回复
引用 2 楼 u012948520 的回复:
这个翻译是那本书上的。。。 应该是想表达Append(String)不改变string本身的值 比如
string s = "2";
StringBuilder sb = new StringBuilder("1").Append(s);
sb.Append("3");
sb是123.2后面接了一个3,但s还是2,后面并没有接3
那副本的意思就是创建一个新实例
xuzuning 2016-09-09
  • 打赏
  • 举报
回复
画蛇添足! 字符串本身就是传值的(复制的那一份就称副本) 被他那么一解释,似乎字符串在大多情况下都是传引用的了
白衣如花 2016-09-09
  • 打赏
  • 举报
回复
这个翻译是那本书上的。。。 应该是想表达Append(String)不改变string本身的值 比如
string s = "2";
StringBuilder sb = new StringBuilder("1").Append(s);
sb.Append("3");
sb是123.2后面接了一个3,但s还是2,后面并没有接3
猿来不容易 2016-09-09
  • 打赏
  • 举报
回复
string s = "hello ";
StringBuilder sb = new StringBuilder(s).Append("world");
Console.WriteLine(sb);
Console.ReadKey();

111,128

社区成员

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

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

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