zoukankan      html  css  js  c++  java
  • 深入C#数据类型

    深入C#数据类型
         1.值类型和引用类型
         1.值类型:直接把数据类型存储在栈中
           问题:已知李明和张浩去年的身高都为170cm,而今年李明身高长到了180cm,张浩没有变化,输出去年和今年两人的身高
          代码:
                  int heightzhang = 170;
                  int heightLi = heightzhang;
                  Console.WriteLine("张浩的身高为:{0} 李明的身高为:{1}",heightzhang,heightLi);
                  heightLi = 180;
                  Console.WriteLine("张浩的身高为:{0} 李明的身高为:{1}", heightzhang, heightLi);
                  Console.ReadLine();
         小结:值类型:不同的变了会分配不同的存储空间,存储空间中存储的是该变了的值,改变一个变量值不会影响另一个变量值

          2.引用类型:直接把数据类型存储在堆中
         1.问题:已知李明和张浩去年的身高都为170cm体重都为60kg,而今年李明身高长到了180cm体重长到70kg,张浩没有变化,输出去年和今年两人的身高
         代码:
                 int[] li = { 170,60};
                 int[] zhang = li;
                 Console.WriteLine("去年—张浩身高为:{0} 体重为:{1} 李明身高为:{2} 体重为:{3}",zhang[0],zhang[1],li[0],li[1]);
                 li[0] = 180;
                 li[1] = 70;
                 Console.WriteLine("去年—张浩身高为:{0} 体重为:{1} 李明身高为:{2} 体重为:{3}", zhang[0], zhang[1], li[0], li[1]);
                 Console.ReadLine();

              

            为什么会出现张浩和李明的值都改变了呢? 

            首先,系统分配了一段空间创建数组,用来存储信息,标识符Li只是一个引用,它指向了内存中创建的这个数组,然后程程序引用Li赋值给zhang因为zhang并没有分配一段存储空间,

            而是和Li使用了同一段存储空间,所以后面的程序在修改黎明的身高和体重时也同样修改了张浩的信息。

                   图片概括了变化过程:

    创建数组Li后的存储状态

         小结:对引用类型,赋值是把元对象引用传递给另一个引用。对数组而言,当一个数组赋值给另一个引用后,这两个音乐只想同一个数组,也就是只想用     一块存储空间                                               

         1.结构
          1.结构的定义
            访问修饰符 struct 结构名
             {
                 //结构体
            }
            结构的定义有以下特点:
            结构中可以有字段
           定义时,结构中的字段不能被赋值
         2.结构的使用
            可以不用new,直接定义结构的对象即可
            声明结果的对象后,必须给结果的成员赋初始值

           

              小结:结构是值类型,声明结构变量就存储一个结构的新副本,及系统要开辟一块新的存储空间,因此结构用得越多所消耗的存储空间也越多

           2.装箱和拆箱

              定义将值类型转换为引用类型的过程称为装箱,反之成为拆箱。

                1.装箱

                 

                 当改变i的值时,因为i是值类型,所以只能改变它自己的值,而无法修改引用类型object的类型。可以理解为创建一个object实例,并将i的值复制给object

                 2.拆箱

                 

                   先将之类型i进行装箱,然后把转换后的引用类型o进行拆箱处理,切记拆箱时,被转换引用类型的数值必须能够转换为目标值类型。

                   经验:在实际开发中,应该尽量减少不必要的装箱和拆箱,因为二者的存储方式不同,转换时性能损失较大。

                   总结

                 *基本数据类型,如整型、浮点型字符型、bool型及结构属于值类型;数组、接口和类属于引用类型

                    *结构是值类型数据,可以看成轻量级的类,使用的时候可以不用new

                    *值类型转换为引用类型称为装箱,反之称为拆箱

  • 相关阅读:
    JS之Math用法
    思科路由器的内存体系由多种存储设备组成,其中用来存放IOS引导等程序的是(11),运行时活动配置文件存放在(12)中。
    下图是一个软件项目的活动图,其中顶点表示项目里程碑,连接顶点的边表示活动,边的权重表示活动的持续时间,则里程碑(7)在关键路径上,活动GH的松弛时间是(8)。
    内存按字节编址从A5000H到DCFFFH的区域其存储容量为(2)。
    若用256K×8bit的存储器芯片,构成地址40000000H到400FFFFFH且按字节编址的内存区域,则需(5)片芯片。
    假设网络的生产管理系统采用B/S工作方式,经常上网的用户数为100个,每个用户每分钟平均产生11个事务,平均事务量大小为0.06MB,则这个系统需要的传输速率为(34)。
    数据包在电缆中的传输时间
    判断一个字符串是否被Base64加密
    bugku之杂项---闪的好快
    关于用jQuery的animate方法实现的动画在IE中失效的原因以及解决方法
  • 原文地址:https://www.cnblogs.com/javahenku/p/8158165.html
Copyright © 2011-2022 走看看