|
变量的基本概念:
变量本事是用来存储特定类型的数据,可以随时改变变量中所存储的数据值。变量具有名称、类型和值。变量的值是可以发生变化的,使用变量之前必须先声明变量,即指定变量的类型和名称。
变量类型根据其定义分为:一种是值类型,另一种是引用类型。
一、变量类型:
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、浮点类型:浮点类型变量主要用于处理含有小数的数值数据,浮点型主要包含float和double。
类型 |
说明 |
范围 |
float |
精确到7位数 |
取值范围在 1.5x10^-45~ 3.4x10^38之间 |
double |
精确到15~16位数 |
取值范围在 5.0x10^-324 ~ 1.7x10^308之间 |
如果不做任何设置,包含小数点的数值都被认为double类型,如果没有指明的情况下,这个数值是double类型。如果要将数值一float类型来处理,就要强制转换使用f或F将其指定为float类型
double MyDou=927d;//使用d强制转换为double double mudou=112D;//使用D强制转换为double将数值数值类型强制指定为double类型,则需要使用D或d进行设置
double MyDou=927d;//使用d强制转换为double double mudou=112D;//使用D强制转换为double 值类型直接存储其值,而引用类型存储是对其值的引用。
值类型的数据存储在内存的栈中,引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。栈在编译是就分配好内存空间,在代码中有栈的明确定义;而堆是程序运行中动态分配的内存空间,可以根据程序的运行情况动态的分配内存大小。
值类型存取速度快,引用类型存取速度慢。值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用。
值类型继承自System.ValueType,引用类型继承自System.Object。
栈的内存分配是自动释放;而堆在.NET中会有GC来释放 。
值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。值类型变量直接把变量的值保存在堆栈中,引用类型的变量把实际数据的地址保存在堆栈中,而实际数据则保存在堆中。堆和堆栈是两个不同的概念,在内存中的存储位置也不相同,堆一般用于存储可变长度的数据,如字符串类型;而堆栈则用于存储固定长度的数据,如整型类型的数据int(每个int变量占用四个字节)。由数据存储的位置可以得知,当把一个值变量赋给另一个值变量时,会在堆栈中保存两个完全相同的值;而把一个引用变量赋给另一个引用变量,则会在堆栈中保存对同一个堆位置的两个引用,即在堆栈中保存的是同一个堆的地址。在进行数据操作时,对于值类型,由于每个变量都有自己的值,因此对一个变量的操作不会影响到其它变量;对于引用类型的变量,对一个变量的数据进行操作就是对这个变量在堆中的数据进行操作,如果两个引用类型的变量引用同一个对象,实际含义就是它们在堆栈中保存的堆的地址相同,因此对一个变量的操作就会影响到引用同一个对象的另一个变量。