C# 关于引用类型的问题

[复制链接]
查看11 | 回复5 | 2010-9-15 11:40:10 | 显示全部楼层 |阅读模式
class MyClass
{

public int val;
}
MyClass objectA = new MyClass();
MyClass objectB = objectA;
objectA.val = 10;
objectB.val = 20;
上面是一些主要的代码,那么objectA.val和objectB.val的值是多少,帮我详细解释一下。
为什么都是20,而不是都是10呢,不是都是调用objectA吗

回复

使用道具 举报

千问 | 2010-9-15 11:40:10 | 显示全部楼层
A,B的val都为20MyClass objectA = new MyClass();//新建MyClass对象objectAMyClass objectB = objectA;//新建MyClass对象objectB,虽然MyClass的va为值类型,但MyClass本身为类,是一个引用类型,所以这里实际上是把objectA的地址赋值给objectB,此时objectA与objectB指向的是内存中的同一个对象。objectA.val = 10;//此时objectA与objectB的val全为10objectB.val = 20;//此时objectA与objectB的val全为20关于“为什么都是20,而不是都是10呢
回复

使用道具 举报

千问 | 2010-9-15 11:40:10 | 显示全部楼层
不需要看class里面的成员类型只需要看objectA本身是一个类的实例,所以objectA就是引用类型,同理objectB//===============MyClass objectA = new MyClass();//声明了objectA ,并且为它分配了内存地址MyClass objectB = objectA;//声明
回复

使用道具 举报

千问 | 2010-9-15 11:40:10 | 显示全部楼层
实际上用C里面的指针来解释会比较容易明白。MyClass objectA = new MyClass();当执行这一句的时候, 创建了一个MyClass类, 我们把objectA当作指针,objectA 指向 了 这个新的 MyClass,我们把它当作 MyClass1MyClass objectB = objectA;这一句里面,objec
回复

使用道具 举报

千问 | 2010-9-15 11:40:10 | 显示全部楼层
打印出来的话,两个都是20,因为是引用型,objectB中保存的是objectA的内存地址,所以你调用objectB就是调用objectA,他们所对应的实际对象是同一个。 ---------------------------------都是20是因为,既然都是操作同一个对象那么总有个先来后到吧?你补充的这个问题问得很没意义
回复

使用道具 举报

千问 | 2010-9-15 11:40:10 | 显示全部楼层
都是20.objectA是以MyClass类新实例化的一个对象,在内存中有一个地址空间。objectB虽然也是一个对象,但没有新开辟一个内存空间,只是指向了objectA的地址空间。第一次objectA.val=10第二次objectB.val=20其实都是对一个数据进行更改,故一改俱改。如果改为:MyClass objectA
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行