StringBuilder传值与Append方法的使用问题????
StringBuilder传值与Append方法的使用问题????static void Main(string[] args)
{
StringBuilder a = new StringBuilder("第一");
StringBuilder b = new StringBuilder("第二");
Change(a, b);
Console.WriteLine("返回主函数后输出的结果5为:"+a + "----" + b);
//结果5为:第一第二————第二SdfSdfs
Console.ReadKey();
}
public static void Change(StringBuilder a, StringBuilder b)
{
a.Append(b);
Console.WriteLine("未交换前输出结果1为:"+a+"----"+b);
//结果为:第一第二————第二
a = b;
Console.WriteLine("交换后输出结果2为:"+a+"----"+b);
//结果为:第二————第二
a.Append("Sdf");
Console.WriteLine("交换后aAppend的输出结果3为:"+a+"----"+b);
//结果为:第二Sdf————第二Sdf
b.Append("Sdfs");
Console.WriteLine("未返回主函数前输出结果4为:"+a + "----" + b);
//结果为:第二SdfSdfs----第二SdfSdfs
}
为何:在Change函数中 :交换后a和b值一样了。可返回主函数后,a的值又不同了呢???同时Append操作执行了???
不知是否该理解为:值类型传递时时创建了一份a的副本而已???? --------------------编程问答-------------------- 不是副本的事。
a = b;
关键在这,
在main中有两个引用a和b,和两个实例A和B,
调用change时还是有两上实例,但有四个对象a b a1 b1。(a1 b1就是两个方法参数)
a和a1使用A,b和b1使用B
方法中a=b;后变成
a=>A
b a1 b1=>B
你能明白吗
--------------------编程问答-------------------- 似懂非懂,不明白!
不知a=b;的具体含义?
是a的引用指向b的引用么??? --------------------编程问答-------------------- 引用类型,这个你先要明白。
a=b;
a和b都指向同一个实例。
和值类型不同。 --------------------编程问答-------------------- 搞不懂你change它干嘛 --------------------编程问答-------------------- a = b;
这句之后,A和B指向了相同的StringBuilder对象。
不过呢,只要这个函数结束执行了,
又会回到,原来A指向什么,还是指向什么,B指向什么还是指向什么 --------------------编程问答-------------------- 2楼+1。。。原本a和a1是指向同一个地址,并没用创建新的内存地址,不过之后a1指向的地址改变了,所以对a1的操作不会影响到a --------------------编程问答-------------------- a=b这种是指向的地址
所以a不受影响
--------------------编程问答--------------------
没多大执行意义,只是用来测试StringBuilder在内存中的指向问题!!! --------------------编程问答--------------------
不过呢,只要这个函数结束执行了
又会回到,原来A指向什么,还是指向什么,B指向什么还是指向什么?????
什么原理呢????
--------------------编程问答-------------------- 只有5楼说对了...就是副本的问题,因为你是按值传递的,即使是引用类型对象也是传递引用副本...
去看看这个...
【.NET版月经问题】之二【引用类型参数就是按引用传递吗?】 --------------------编程问答-------------------- 楼主 我和你一样一样的 我推荐你一本书 谭浩强写的C 看完很多东西都明白了
每次听到别人回答你引用,是不是一头雾水,什么是引用?
引用就是指针,指针就是内存的地址。
一定要看基础的C,这个是基本的概念。
我老板就是这么训练我的。哈哈 --------------------编程问答-------------------- 重点看指针,还有链表,还有内存的知识。
补充:.NET技术 , C#