黑马程序员技术交流社区
标题:
关于引用类型的问题
[打印本页]
作者:
葛杨杨
时间:
2013-5-19 08:47
标题:
关于引用类型的问题
本帖最后由 葛杨杨 于 2013-5-20 18:58 编辑
代码如下, 其中
C r1 = new C();
C r2 = r1;
这块,声明r2的时候是不是重新创建了一个C的对象实例,这个对象实例跟r1对应的对象实例是同一个还是全新的两个?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 引用类型
{
class Program
{
class C
{
public int Value = 0;
}
static void Main(string[] args)
{
int v1 = 0;
int v2 = v1;
v2 = 927;
C r1 = new C();
C r2 = r1;
r2.Value = 112;
Console.WriteLine("Values:{0},{1}",v1,v2);
Console.WriteLine("Refls:{0},{1}",r1.Value, r2.Value);
Console.ReadKey();
}
}
}
复制代码
作者:
斩_梦
时间:
2013-5-19 09:05
一个。
两个都是同一个实例,只是初始化了一个实例,第一个初始化一个类的时候在堆中分配了空间,栈中有堆地址的引用,C r2=r1;实际上就是把r1的地址给了r2.
作者:
王朋
时间:
2013-5-19 11:20
值类型是在栈上的,赋值的时候直接把值复制进行了传递,引用类型是在堆中,赋值的时候是直接复制了引用的地址,但实际上还是只想的是堆中的同一块内存。
上面的代码开始int类型是值类型,这个时候输出结果v1=0,v2开始=0,后来经过赋值变成927了
而类是引用类型,r1和r2都是只想了内存中的同一个地址,这个时候他们俩的value字段的值应该都是赋值以后的值了也就是112
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2