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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 闫常国 中级黑马   /  2013-5-1 22:17  /  1600 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 闫常国 于 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();
        }
    }
}

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

7 个回复

倒序浏览
obj指向的是内存堆中的空间的值为a,int a在内存栈中。
int a=0;栈中的a为0
Object obj=a;将obj指向的堆中的内存空间赋值为a,
a=100;给栈中的a的值重新赋值100

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
值类型在栈中
引用类型的值存放在堆中
回复 使用道具 举报
谁能详解一下内存中的堆和栈
回复 使用道具 举报
一般普通对象都是引用类型,赋值的时候都是传递类型,而像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();
         }
     }
}
回复 使用道具 举报
int类型a赋值给object类型obj是一个装箱的过程,
是将a的值复制了一份,之后obj与a没有任何关系。
无论怎么操作a都不影响obj的值。
:)
回复 使用道具 举报
陈晖 发表于 2013-5-2 16:20
int类型a赋值给object类型obj是一个装箱的过程,
是将a的值复制了一份,之后obj与a没有任何关系。
无论怎么 ...

嗯 学习了 谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马