—-刘铁猛《C#语言入门详解》
变量
什么是变量?
变量:以变量名所对应的内存地址为起点,以其数据类型所要求的存储空间为长度的一块内存区域(变量中存储的是值类型的值,或者引用类型的地址)。
通俗理解,变量:用来标识一块内存区域,即变量就是一块内存区域。变量名:是一个标识符,用来指代一块内存区域。变量名表示变量的值在内存中的存储位置。
通俗理解,变量:用来标识一块内存区域,即变量就是一块内存区域。变量名:是一个标识符,用来指代一块内存区域。变量名表示变量的值在内存中的存储位置。
变量主要分为七种:
静态变量
静态变量属于类,而不是类的特定实例。
静态变量在类加载时被初始化,只有一份存储空间,所有类的实例共享同一份静态变量。
静态变量使用static关键字声明,在内存中存储在静态存储区域。
可以通过类名直接访问静态变量,无需实例化对象。
通常用于存储类级别的信息,如常量、计数器等。
实例变量(成员变量,字段)
实例变量属于类的实例(对象),每个对象都有自己的实例变量副本。
实例变量在创建对象时被分配内存空间,并随着对象的销毁而释放。
实例变量不使用static关键字声明,每个对象都有自己的实例变量。
必须通过对象实例来访问实例变量。
数组元素
数组是一种数据结构,用于存储相同类型的多个元素。具体可看数据结构一栏。
值参数
值参数是一种参数传递方式,将参数的值传递给方法。
对值的修改不会影响到原始值。
引用参数
将方法里中的参数的值输出(参数前加上 out 关键字)
局部变量
局部变量是在方法、构造函数或代码块内部声明的变量,只在声明的作用域内有效。局部变量在声明时必须初始化,可以在声明时或稍后赋值
变量的声明
有效的修饰符组合(可选) + 类型 + 变量名 + 初始化器(可选)
值类型变量和引用类型变量
值类型变量
值类型没有实例。不需要new操作。
在内存分配的时候会根据该类型所需的空间来分配字节(根据类型实际大小)。
值类型没有实例。不需要new操作。
在内存分配的时候会根据该类型所需的空间来分配字节(根据类型实际大小)。
引用类型变量:
引用本质是指针。
引用类型需要实例化。
引用类型在内存分配的时候会跟据电脑系统的位数来分配(32对应4字节,64对应8字节)。
引用类型变量存储的数据是对象的地址。
引用本质是指针。
引用类型需要实例化。
引用类型在内存分配的时候会跟据电脑系统的位数来分配(32对应4字节,64对应8字节)。
引用类型变量存储的数据是对象的地址。
Tip :引用类型对象的数据部分始终存放在堆里。值类型对象可存放在栈里,也可以在堆里。
当变量为静态变量时,引用类型的引用和基本类型的值存储在方法区里。
当变量为成员变量时,引用类型的引用和基本类型的值存储在堆里。
当变量为局部量时,引用类型的引用和基本类型的值存储在栈里。
当变量为静态变量时,引用类型的引用和基本类型的值存储在方法区里。
当变量为成员变量时,引用类型的引用和基本类型的值存储在堆里。
当变量为局部量时,引用类型的引用和基本类型的值存储在栈里。
装箱和拆箱
装箱:把栈上的值类型转成堆上的引用类型。操作:先copy值类型到堆上面,然后在存储该地址的地址,而不是直接copy值类型(深拷贝)。
拆箱:引用类型转成值类型。操作:根据引用类型找到堆上的值类型,copy堆上的值类型到栈上。
拆箱:引用类型转成值类型。操作:根据引用类型找到堆上的值类型,copy堆上的值类型到栈上。