黑马程序员技术交流社区

标题: 值类型和引用类型作为参数传递的问题???? [打印本页]

作者: 赵威    时间: 2013-4-27 17:24
标题: 值类型和引用类型作为参数传递的问题????
本帖最后由 赵威 于 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??
求高手解答



作者: 黑马田杰    时间: 2013-4-27 17:28
值类型作为参数传递时,是将其值复制一份传到参数里面。
而引用类型作为参数传递时,是将对其的引用传到参数里面,也就是说,把它的地址传进去了。
作者: 刘胜寒    时间: 2013-4-27 17:38
黑马田杰 发表于 2013-4-27 17:28
值类型作为参数传递时,是将其值复制一份传到参数里面。
而引用类型作为参数传递时,是将对其的引用传到参 ...

正解....

作者: 陈晖    时间: 2013-4-27 17:44
值类型传递时,先将变量的值复制一份,完完全全地传递值,之后两者就没有任何关系了。
你的例子:将n的值复制一份传给x,之后n与x没有任何关系,只不过n与x拥有相同的值而已。
而引用类型传值,传递的是变量的引用地址。
你的例子:p将自己的引用地址传给变量per,per就拥有了p的引用地址,包括p的所用变量的引用地址,
当修改per的属性值时,p的属性值也会发生改变了。因为它们指向同一个引用地址。
:)
作者: 张松    时间: 2013-4-27 21:18
本帖最后由 张松 于 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)

引用类型

引用类型

作者: 赵威    时间: 2013-4-29 09:00
张松 发表于 2013-4-27 21:18
[/img]
C:\Users\Administrator\Desktop\2.PNG
值类型变量存储的是数据类型所代表的实际数据,值类型变量的 ...

图看懂了,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2