A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© redlong 中级黑马   /  2014-4-3 23:17  /  917 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 redlong 于 2014-4-5 23:22 编辑

关于值类型和引用类型的区别

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

2 个回复

正序浏览
值类型的对象是直接存放具体值的,每个值都有自己的独立空间,例如,有两个同样的值,其中一个被修改,这并不会影响到另一个值;
引用类型的是存放的那个对象的存放地址,所以如果两个对象引用了它,一个对象里改了值,那么另一个对象的值也会变成这个新改的值,这两个对象用的是同一个数据。
回复 使用道具 举报
打个比方说:值类型就是现金,要用直接用;引用类型是存折,要用还得先去银行取现。
声明一个值类型变量,编译器会在栈上分配一个空间,这个空间对应着该值类型变量,空间里存储的就是该变量的值。引用类型的实例分配在堆上,新建一个引用类型实例,得到的变量值对应的是该实例的内存分配地址,这就像银行账号一样。
1.值类型:就是一个包含实际数据的量。即当定义一个值类型的变量时,C#会根据它所声明的类型,以栈方式分配一块大小相适应的存储区域给这个变量,随后对这个变量的读或写操作就直接在这块内存区域进行
2.引用类型:一个引用类型的变量不存储它们所代表的实际数据,而是存储实际数据的引用。
引用类型分两步创建:首先在栈上创建一个引用变量,然后在堆上创建对象本身,再把这个内存的句柄(也是内存的首地址

namespace 值类型和引用类型的区别  
{  
    public class Car  
    {  
        public int speed { get; set; }  
        public string carName { get; set; }  
        public Car(int speed, string carName)  
        {  
            this.speed = speed; this.carName = carName;  
        }  
    }  
    public class Program  
    {  
        static void Main(string[] args)  
        {  
            Car a = new Car(100, "宝马");  
            Car b = new Car(200, "奔驰");  
  
            int myspeed = a.speed;//测试值类型  
            a.speed = 150;  
  
            Car c = b;//测试引用类型  
            b.carName = "法拉利";  
  
            Console.WriteLine("myspeed={0}", myspeed);  
            Console.WriteLine("a.speed={0}", a.speed);  
            Console.WriteLine("b.carName={0}",b.carName);  
            Console.WriteLine("c.carName={0}", c.carName);  
        }  
    }  
}
运行结果:
myspeed=100
a.speed=150
b.carName=法拉利
c.carName=法拉利
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马