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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© popoluno 中级黑马   /  2013-7-7 16:30  /  2127 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面的程序结果为
20
20
30
40
求解释

namespace 值与引用
{
    class MyClass
    {
         public int var;
    }
    class MyStruct
    {
         public int var;
    }
    class Program
    {
         static void Main(string [] args)
        {
              MyClass ObjectA=new MyClass();
              MyClass ObjectB=ObjectA;
              ObjectA.var=10;
              ObjectB.var=20;
              MyStruct StructA=new MyStruct();
              MyStruct StructB=StructA;
              StructA.var=30;
              StructB.var=40;
              Console.WriteLine(ObjectA.var);
              Console.WriteLine(ObjectB.var);
              Console.WriteLine(StructA.var);
              Console.WriteLine(StructB.var);
             Console.ReadKey();
         }

    }
}

评分

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

查看全部评分

3 个回复

倒序浏览
MyClass ObjectA=new MyClass();
               MyClass ObjectB=ObjectA;//这一句这会再分配 新的空间的 只是把ObjectA的地址给了ObjectB,当然ObjectA.var=10;
                                                      ObjectB.var=20;  要依后面的值了

评分

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

查看全部评分

回复 使用道具 举报
我把你的程序考下来运行了,你的程序只是一个引用类型的例子,引用类型用“=”赋值的时候,复制的是地址,所以操作的时候,后面的会覆盖前面的,你再看看你的程序运行结果是怎样的

QQ图片20130707173313.jpg (8.74 KB, 下载次数: 0)

QQ图片20130707173313.jpg

评分

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

查看全部评分

回复 使用道具 举报
int a=1;int b=a;这样的是值类型的赋值,它是在栈里面开辟一个空间,把a的值复制一份放在刚开辟的空间里。他们之间的值得变动互相不影响。 MyStruct StructA=new MyStruct(); MyStruct StructB=StructA;它是把栈里面StructA指向堆里面的对象的地址复制给StructB,也就是说StructA和StructB指向的是同一个对象,对象里面的值改变,他们调用对象里面的变量就会改变。

评分

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

查看全部评分

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