黑马程序员技术交流社区

标题: 预定义数据类型 [打印本页]

作者: 马毅    时间: 2012-12-19 22:34
标题: 预定义数据类型
一. 值类型和引用类型
      值类型和引用类型的区别在于在内存中的存储方式,值类型存储在堆栈上,而引用类型存储在托管堆上,例如:
  1. //因为int是值类型,所以一下代码会在内存中创建两个位置存储两个10
  2. int i = 10;
  3. int j =i;
复制代码
  1.     //而以下代码,由于Class是引用类型,所以只在内存中开辟了一块区域,而有两个(cc和ccc)指向它的引用
  2.     class Program
  3.     {
  4.         static int i = 10;
  5.         static void Main(string[] args)
  6.         {

  7.             C1 cc = new C1();
  8.             C1 ccc = cc;
  9.         }
  10.     }
  11.     class C1
  12.     {
  13.            int val;
  14.     }
复制代码
      所以当有如下代码:
  1. cc.val = 30;
  2. ccc.val = 50;
复制代码
      当执行上一句的时候,cc和ccc的val值都是30,下面一句执行之后都会变成50,这点注意区别。
值类型
sbyte short intlong byte
ushort uintulong float double
decimal book char struct
引用类型
Object,string


      需要注意的是bool,char还有结构体都是值类型,string是较为特殊的一种引用类型,所以string被分配在托管堆上,而不是堆栈上,但string类型一旦被创建,则不可更改,这点和其他引用类型不同,所以对其的修改都是创建一个新的string,而把对原来的引用更新到指向新的这个,例如:
  1.             string s1 = "abcde";
  2.             string s2 = s1;//此时si,s2指向同一个string
  3.             s2 = "ABCDE";//s2指向“ABCDE”,而此时si指向原来的“abcde”
复制代码
PS:注意,char类型有单引号引起来,而string是双引号
其他C#基础请看这里

      


作者: 许庭洲    时间: 2012-12-20 19:21
值得学习ing!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2