黑马程序员技术交流社区
标题:
昨天发错的一个帖子,修正求解释
[打印本页]
作者:
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)
下载附件
2013-7-7 17:33 上传
作者:
王震
时间:
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