A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 赵威 于 2013-4-29 09:01 编辑

值类型作为参数传递:
static void Main(string[] args)
        {
            int n = 100;
            M1(n);
            Console.WriteLine(n);
            Console.ReadKey();
        }
        static void M1(int x)
        {
            x++;
        }
这里的n值为什么不是101而是100;

引用类型作为参数传递:
static void Main(string[] args)
        {
            Person p = new Person();
            p.Name = "gy";
            M1(p);
            Console.WriteLine(p.Name );
            Console.ReadKey();

        }

        static void M1(Person per)
        {
            per.Name = "zw";
        }
这个最后的输出结果为什么是zw??
求高手解答


评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

5 个回复

倒序浏览
值类型作为参数传递时,是将其值复制一份传到参数里面。
而引用类型作为参数传递时,是将对其的引用传到参数里面,也就是说,把它的地址传进去了。

点评

正解,和C语言类似  发表于 2013-4-27 23:17

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1 画个图给他看更好

查看全部评分

回复 使用道具 举报
黑马田杰 发表于 2013-4-27 17:28
值类型作为参数传递时,是将其值复制一份传到参数里面。
而引用类型作为参数传递时,是将对其的引用传到参 ...

正解....
回复 使用道具 举报
值类型传递时,先将变量的值复制一份,完完全全地传递值,之后两者就没有任何关系了。
你的例子:将n的值复制一份传给x,之后n与x没有任何关系,只不过n与x拥有相同的值而已。
而引用类型传值,传递的是变量的引用地址。
你的例子:p将自己的引用地址传给变量per,per就拥有了p的引用地址,包括p的所用变量的引用地址,
当修改per的属性值时,p的属性值也会发生改变了。因为它们指向同一个引用地址。
:)

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 张松 于 2013-4-27 21:20 编辑

[/img]C:\Users\Administrator\Desktop\1.PNG
[img]C:\Users\Administrator\Desktop\2.PNG
值类型变量存储的是数据类型所代表的实际数据,值类型变量的值(或实例)存储在栈(Stack)中,赋值语句是传递变量的值。引用类型(例如类就是引用类型)的实例,也叫对象,不存在栈中,而存储在可管理堆(Managed Heap)中,堆实际上是计算机系统中的空闲内存。引用类型变量的值存储在栈(Stack)中,但存储的不是引用类型对象,而是存储引用类型对象的引用,即地址,和指针所代表的地址不同,引用所代表的地址不能被修改,也不能转换为其它类型地址,它是引用型变量,只能引用指定类对象,引用类型变量赋值语句是传递对象的地址。

1.PNG (9.56 KB, 下载次数: 0)

值类型

值类型

2.PNG (12.55 KB, 下载次数: 0)

引用类型

引用类型

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1 很好很强大

查看全部评分

回复 使用道具 举报
张松 发表于 2013-4-27 21:18
[/img]
C:\Users\Administrator\Desktop\2.PNG
值类型变量存储的是数据类型所代表的实际数据,值类型变量的 ...

图看懂了,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马