C#基础-变量与常量(一)

已有 1528 次阅读2015-8-19 14:44 |个人分类:C#

Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4

   变量的基本概念:
  变量本事是用来存储特定类型的数据,可以随时改变变量中所存储的数据值。变量具有名称、类型和值。变量的值是可以发生变化的,使用变量之前必须先声明变量,即指定变量的类型和名称。

       变量类型根据其定义分为:一种是值类型,另一种是引用类型。
一、变量类型:
   1
、值类型特征:
             
①、值类型变量都存储在堆栈中;
             
②、访问值类型变量时,一般都是直接访问其实例;
             
③、每个值类型变量都有自己的数据副本,因此对一个值类型变量操作不会影响其他变量;
             
④、复制值类型变量时,复制的是变量的值,而不是变量的地址;
             
⑤、值类型变量不能为NULL,必须具有一个确定的值。
      
值类型是从System.ValueType 类继承而来的类型。
   2
、整数类型:整数类型代表没有小数点的整数数值

类型

说明

范围

Sbyte

8有符号整数

取值范围在128~127之间

Short

16有符号整数

取值范围在-32,768~32,767之间

Int

32有符号整数

取值范围在-2,147,483,648~ 2,147,483,647之间

Long

64位有符号整数

取值范围在-9,223,372,036,854,775,808~ 9,223,372,036,854,775,807之间

Byte

8无符号整数

取值范围在0~255之间

Ushort

16无符号整数

取值范围在0~65,535之间

Uint

32无符号整数

取值范围在 0 ~ 4,294,967,295之间

Ulong

64位无符号整数

取值范围在0 ~ 18,446,744,073,709,551,615之间

创建一个控制台应用程序,声明变量int类型的变量ls并初始化为927,一个为byte类型的变量shj并初始化为255,输出
statci void Main (string [] arge)
{
        int ls=927;                                 
//声明一个int类型的变量ls
        byte shj =255;                               //声明一个byte类型的变量shj
        Console.WriteLine("ls={0},shj={1}"+ls,shj);  //输出
        Console.ReadLine();
}
如果将byte类型的变量shj赋值266出现错误,byte值范围0~255
3
、浮点类型:浮点类型变量主要用于处理含有小数的数值数据,浮点型主要包含floatdouble

类型

说明

范围

float

精确到7位数

 取值范围在 1.5x10^-45~ 3.4x10^38之间

double

精确到15~16位数

 取值范围在 5.0x10^-324 ~ 1.7x10^308之间

如果不做任何设置,包含小数点的数值都被认为double类型,如果没有指明的情况下,这个数值是double类型。如果要将数值一float类型来处理,就要强制转换使用fF将其指定为float类型

         double MyDou=927d;//使用d强制转换为double         double mudou=112D;//使用D强制转换为double

将数值数值类型强制指定为double类型,则需要使用Dd进行设置

         double MyDou=927d;//使用d强制转换为double         double mudou=112D;//使用D强制转换为double
        
布尔型:布尔类型主要用来表示true/false值,一个布尔类型的变量,其值只能是true或者false,不能将其他的值指定给布尔类型变量,布尔类型变量不能与其他类型进行转换。
              
927赋值给布尔类型变量x
              
Bool x=927;
               这样赋值是错误的,常量值927无法转换为bool
三、引用类型:
 1、 引用类型是构建C#应用程序的主要对象类型数据,预先定义的对象类型以new创建对象实例,并存储在堆栈中。
  2
、引用类型特征:
    
①、必须在托管堆中为引用类型变量分配内存;
    
②、必须需new关键字来创建引用类型变量;
    
③、在托管堆中分配的每个对象都有与之相关联的附加成员,这些成员必须被初始化;
    
④、引用类型变量室友垃圾回收机制来管理的;
    
⑤、多个引用变量可以引用同一对象,这种情况下,对一个变量的操作会影响另一个变量所引用的同一对象;
    
⑥、引用类型被赋值前的值都是NULL
    所有被称为“类”的都是引用类型,主要包括类、接口、数组和委托。
    创建一个控制台应用程序,在其中创建一个C类,在该类中建立一个字段Value,并初始化为0.然后通过其他位置通过new创建该类的引用类型变量,最后输出。
class Program
{
  class C                         
//创建一个C
  {
      public int Value = 0;        
//声明一个公共int类型的变量Value
   }
  static void Main(string[] args)
  {
    int v1 = 0;                   
//声明一个int类型的变量v1,并初始化为0
    int v2 = 1;                   
//声明一个int类型的变量v2,并将v1赋值个v2
    v2 = 927;                     
//重新将变量V2赋值为927
    C r1 = new C();                //使用new关键字创建引用对象
    C r2 = r1;                    
//使r1=r2
    r2.Value = 112;               
//设置r2value                                   //设置输出v1v2的变量
    Console.WriteLine("Values;{0},{1}", v1, v2);
                                  
//输出引用类型对象的value
    Console.WriteLine("refs;{0},{1}", r1.Value, r2.Value);
    Console.ReadLine();
  }
}
四、值类型与引用类型的区别

       值类型直接存储其值,而引用类型存储是对其值的引用。
      
值类型的数据存储在内存的栈中引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。栈在编译是就分配好内存空间,在代码中有栈的明确定义;而堆是程序运行中动态分配的内存空间,可以根据程序的运行情况动态的分配内存大小。
   
值类型存取速度快,引用类型存取速度慢。值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用。
   
值类型继承自System.ValueType,引用类型继承自System.Object
   
栈的内存分配是自动释放;而堆在.NET中会有GC来释放 
   
值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。值类型变量直接把变量的值保存在堆栈中,引用类型的变量把实际数据的地址保存在堆栈中,而实际数据则保存在堆中。堆和堆栈是两个不同的概念,在内存中的存储位置也不相同,堆一般用于存储可变长度的数据,如字符串类型;而堆栈则用于存储固定长度的数据,如整型类型的数据int(每个int变量占用四个字节)。由数据存储的位置可以得知,当把一个值变量赋给另一个值变量时,会在堆栈中保存两个完全相同的值;而把一个引用变量赋给另一个引用变量,则会在堆栈中保存对同一个堆位置的两个引用,即在堆栈中保存的是同一个堆的地址。在进行数据操作时,对于值类型,由于每个变量都有自己的值,因此对一个变量的操作不会影响到其它变量;对于引用类型的变量,对一个变量的数据进行操作就是对这个变量在堆中的数据进行操作,如果两个引用类型的变量引用同一个对象,实际含义就是它们在堆栈中保存的堆的地址相同,因此对一个变量的操作就会影响到引用同一个对象的另一个变量。

/* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.5pt; mso-bidi-font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:宋体; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:"Times New Roman"; mso-bidi-theme-font:minor-bidi; mso-font-kerning:1.0pt;}

路过

雷人

握手

鲜花

鸡蛋

全部作者的其他最新日志

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册