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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sunrise2 高级黑马   /  2014-7-16 22:40  /  741 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、值类型与引用类型

我们将我们之前学的数据类型划分成两拨:
       值类型
      所有的数值类型(long int short byte ulong uint ushort sbyte decimal double float)、bool、char、枚举、结构
     引用类型
    string字符串、 数组、类
    划分依据: 他们在内存中存储的结构不同

2、值类型与引用类型的异同点

a. 相同点:
无论是值类型的变量还是引用类型的变量, 变量始终是开辟在栈空间中的.
b. 不同点:
值类型的变量真实的值 直接存储在 值类型的变量之中.
引用类型的真实的值(对象) 是存储在 堆空间之中. 引用类型的变量之中存储的是 真实的值(对象)在空间中的地址.

3、值类型与引用类型的赋值效果不同
     在这里强调一下: 无论是什么类型的变量之间相互赋值, 都是将源变量的值拷贝1份,将这个副本赋值给目标变量.

a. 值类型的变量在相互赋值的时候,是对1个变量的值进行修改,不会影响另外1个变量的值.

b. 引用类型的变量之间相互赋值,两个引用类型的变量实际上指向了同1个堆空间中的地址(对象),对1个变量进行修改 会影响另外的1个变量

特别注意的是:string是一种特殊的引用类型,string在内存中存储时按照引用类型的存储. 但是在赋值的时候不是这样的,是由于字串符的恒定性造成的。

4、通过代码的运用更深入地了解值类型和引用类型的区别
  1. <font size="2" color="#000000">int temp;

  2. temp = 100;

  3. Console.WriteLine("修改前,temp=" + temp);

  4. ChangeValue(temp);

  5. Console.WriteLine("修改后,temp=" + temp);

  6. Student stu = new Student() { Name = "张三", Age = 30 };

  7. Console.WriteLine("修改前:" + stu.Name + "  :" + stu.Age);

  8. ChangeValue(stu);

  9. Console.WriteLine("修改后:" + stu.Name + "  :" + stu.Age);

  10. Console.ReadKey();

  11. static void ChangeValue(int num)

  12. {

  13.       num = 200;

  14. }

  15. static void ChangeValue(Student stu)

  16. {

  17.       stu.Age = 40;

  18.       stu.Name = "李四";

  19. }</font>
复制代码




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马