黑马程序员技术交流社区

标题: 关于值传递和引用传递的问题??? [打印本页]

作者: 闫常国    时间: 2013-5-1 22:17
标题: 关于值传递和引用传递的问题???
本帖最后由 闫常国 于 2013-5-2 17:28 编辑

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 0;
            object obj = a;
            a = 100;
            Console.WriteLine(a);//a值为100
            Console.WriteLine(obj);//obj值为0       这里obj不是指向a所开辟的内存空间吗,为什么a的值改变了,而obj的值没变?obj的值难道不是引用传递吗?
            Console.ReadKey();
        }
    }
}
作者: 刘赛    时间: 2013-5-1 22:24
obj指向的是内存堆中的空间的值为a,int a在内存栈中。
int a=0;栈中的a为0
Object obj=a;将obj指向的堆中的内存空间赋值为a,
a=100;给栈中的a的值重新赋值100
作者: 刘赛    时间: 2013-5-1 22:26
值类型在栈中
引用类型的值存放在堆中
作者: 闫常国    时间: 2013-5-1 22:29
谁能详解一下内存中的堆和栈
作者: ↖落葉下♀媃媚    时间: 2013-5-1 23:06
一般普通对象都是引用类型,赋值的时候都是传递类型,而像int   datemate   bool      char类型属于值类型,赋值的时候都是
传递拷贝!引用传递传的是对象的地址而不是内容!

namespace Test
{
     class Program
     {
         static void Main(string[] args)
         {
             int a = 0;
             object obj = a;//这里是指向a的原来的内存地址
             a = 100;//开辟了另一个内存空间,所以a改变不影响obj的值
             Console.WriteLine(a);//a值为100
             Console.WriteLine(obj);//obj值为0      
            Console.ReadKey();
         }
     }
}
作者: 陈晖    时间: 2013-5-2 16:20
int类型a赋值给object类型obj是一个装箱的过程,
是将a的值复制了一份,之后obj与a没有任何关系。
无论怎么操作a都不影响obj的值。
:)
作者: 闫常国    时间: 2013-5-2 17:28
陈晖 发表于 2013-5-2 16:20
int类型a赋值给object类型obj是一个装箱的过程,
是将a的值复制了一份,之后obj与a没有任何关系。
无论怎么 ...

嗯 学习了 谢谢




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