当前位置:编程学习 > C#/ASP.NET >>

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不受影响
--------------------编程问答--------------------
引用 4 楼 51crack 的回复:
搞不懂你change它干嘛

没多大执行意义,只是用来测试StringBuilder在内存中的指向问题!!! --------------------编程问答--------------------
引用 5 楼 linux7985 的回复:
a = b;

这句之后,A和B指向了相同的StringBuilder对象。

不过呢,只要这个函数结束执行了,
又会回到,原来A指向什么,还是指向什么,B指向什么还是指向什么

不过呢,只要这个函数结束执行了
又会回到,原来A指向什么,还是指向什么,B指向什么还是指向什么?????
什么原理呢????
--------------------编程问答-------------------- 只有5楼说对了...就是副本的问题,因为你是按值传递的,即使是引用类型对象也是传递引用副本...

去看看这个...

【.NET版月经问题】之二【引用类型参数就是按引用传递吗?】 --------------------编程问答-------------------- 楼主 我和你一样一样的 我推荐你一本书 谭浩强写的C 看完很多东西都明白了

每次听到别人回答你引用,是不是一头雾水,什么是引用?

引用就是指针,指针就是内存的地址。

一定要看基础的C,这个是基本的概念。

我老板就是这么训练我的。哈哈 --------------------编程问答-------------------- 重点看指针,还有链表,还有内存的知识。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,