黑马程序员技术交流社区

标题: 昨天发错的一个帖子,修正求解释 [打印本页]

作者: popoluno    时间: 2013-7-7 16:30
标题: 昨天发错的一个帖子,修正求解释
下面的程序结果为
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();
         }

    }
}
作者: baoshouying    时间: 2013-7-7 17:17
MyClass ObjectA=new MyClass();
               MyClass ObjectB=ObjectA;//这一句这会再分配 新的空间的 只是把ObjectA的地址给了ObjectB,当然ObjectA.var=10;
                                                      ObjectB.var=20;  要依后面的值了
作者: 风雪再现    时间: 2013-7-7 17:35
我把你的程序考下来运行了,你的程序只是一个引用类型的例子,引用类型用“=”赋值的时候,复制的是地址,所以操作的时候,后面的会覆盖前面的,你再看看你的程序运行结果是怎样的

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

QQ图片20130707173313.jpg

作者: 王震    时间: 2013-7-8 13:09
int a=1;int b=a;这样的是值类型的赋值,它是在栈里面开辟一个空间,把a的值复制一份放在刚开辟的空间里。他们之间的值得变动互相不影响。 MyStruct StructA=new MyStruct(); MyStruct StructB=StructA;它是把栈里面StructA指向堆里面的对象的地址复制给StructB,也就是说StructA和StructB指向的是同一个对象,对象里面的值改变,他们调用对象里面的变量就会改变。





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