class Myclass
{
public int cal;
}
class Class1
{
Myclass objectA=new Myclass();
Myclass objectB=objectA
objectA.val=10;
objectB.val=20;
}
提问1:为什么生成后OBJECTA和B都等于20?为什么不都是10,或者10和20,不是A=B吗?
提问2:为什么OBJECTB不需要实例化
谢谢西三227同学的回答,但是操作我NEW出来的对象不是objectA吗,而objectA赋值的是10呀,为什么结果确实objectB的20?
以上代码转自c#入门经典。。
c#的基础问题
答案:4 悬赏:80 手机版
解决时间 2021-04-04 20:12
- 提问者网友:wodetian
- 2021-04-04 00:39
最佳答案
- 五星知识达人网友:西风乍起
- 2021-04-04 00:50
我通俗(专业化的说法怕你不理解)的解释:
Myclass objectA=new Myclass();,objectA是你new出来的对象的地址,然后
Myclass objectB=objectA,则objectB接收了objectA的地址,所以他们两个变量都是同一个地址,都指向第一个new出来的对象。当你objectA.val=10;
objectB.val=20;时,实际上操作的都是你new出来那个对象,所以最终结果都是20
不知道这样讲你理解否
objectB这个变量的内容是一个“地址”,就是你new出来的对象的地址,所以无论你是对objectA还是对objectB操作,其实都是操作那个new出来的对象,也就是操作同一个对象。懂了吗?
Myclass objectA=new Myclass();,objectA是你new出来的对象的地址,然后
Myclass objectB=objectA,则objectB接收了objectA的地址,所以他们两个变量都是同一个地址,都指向第一个new出来的对象。当你objectA.val=10;
objectB.val=20;时,实际上操作的都是你new出来那个对象,所以最终结果都是20
不知道这样讲你理解否
objectB这个变量的内容是一个“地址”,就是你new出来的对象的地址,所以无论你是对objectA还是对objectB操作,其实都是操作那个new出来的对象,也就是操作同一个对象。懂了吗?
全部回答
- 1楼网友:詩光轨車
- 2021-04-04 04:58
我也学的不深。不过还知道点这个问题的。
这个就是引用和值的区别!
Myclass objectA=new Myclass();
如上,当实例化一个类对象,并初始化后,会在堆中开辟一块内存,存放这个对象。
objectB=objectA 即把对objectA的引用赋给 objectB
objectB 和 objectA 相当于一个人有两个不同的名子(比如一个大名,一个小名),着两个名字都指这一个人!
问题 1和 2 都应该明白了吧?
项彻底搞清楚的话,还是看书吧,吃透它!基础的东西,不能含糊!
- 2楼网友:千杯敬自由
- 2021-04-04 03:25
(⊙o⊙)…
你声明了两个对象。按照你的理解,应该有两个实体。可是引用类型(对象)本身就不是实体,实体指的是在内存中活生生的站着茅坑的数据和方法。而new 一个类,则创建了一个这样的实体,然后将其地址(引用)赋给对象变量。
这个对象变量objectA,objectB仅仅保存这一个地址。而实体的数据和方法,在另一个地方存着呢。
如果这两个对象变量保存的是一个地址,我们就说他们引用了一个实体。任何以这两个变量为代理进行的对象更改,都将重叠在一个实体上。
这和值类型的变量是不同的。int a =2;int b=a;值变量的声明,即创建了一个实体,b=a的操作,是将一个实体复制给另一个实体的操作。所以值变量一般不允许不经赋值的使用——因为已经有了内存区域,不赋值的话谁也说不清里面到底是多少。(使用类似的Nullable语法,int允许变量为null)。
我不是理论型的选手,这样的解释可能漏洞很多,不过希望你能理解其中的意思,毕竟初学者先通过第一关才是关键的。
- 3楼网友:七十二街
- 2021-04-04 02:20
Myclass objectB=objectA
这句话是附值 "=" 号是赋值的意思哦..
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯