深入C#数据类型
一、值类型和引用类型
C#常用的数据类型
常用的数据类型 | java | C# | 举例 |
整型 | int | int | 年龄 |
浮点型 | float | float | 成绩 |
双精度型 | double | double | 圆周率 |
字符串 | String | string | 家庭住址 |
布尔型 | boolean | bool | 是否为少数民族 |
枚举类型 | enum | enum | 颜色 |
1、值类型
每个值类型的对象都有一个独立的内存区域用于保存自己的值,值类型所在的内存区域成为栈,值类型主要包括基本数据类型(int float double…)不包含字符串和枚举类型等。
对于值类型,不同的变量会分配不同的空间,并且存储空间中储存的该是变量的值,赋值操作传递是变量值,改变一个变量的值是不会影响另一个变量的值。
值类型包括:
基本数据类型:int、long、float、double、char、bool
枚举类型:枚举enum
结构类型:struct
特点:数据直接存储在栈区
2、引用类型
引用类型包括数组、类和接口,字符串string等。
数组引用类型有两种案列
小结:对于引用类型,赋值是把原对象的引用传递给另一个引用,对于数值而言,当一个数字引用赋值给另一个数组后,这两个引用指向同一个数组,也就是指向同一块存储空间。
数组复制可以利用循环实现
引用类型:类、接口、数组
类:基类System.Object、字符串string、自定义类class
接口:interface
数组:int[],string[]
特点:数据存储在堆区,但是栈区也会分配内存空间,栈区存储的是堆区的地址。
结构的定义
访问修饰符 struct 结构名
{
//结构体
}
结构的使用
可以不用new,直接定义结构的对象即可
声明结构的对象后,必须个结构的成员赋初值
结构的使用经验
结构是值类型,声明结构变量就存储一个结构的新副本,即系统要开辟一块新的存储空间,
因此结构用得越多所消耗的存储空间也越多
装箱和拆箱
数据类型分为值类型和引用类型,两者仍然可以相互转换。
将值类型转换为引用类型的过程为装箱,反之为拆箱。
示例:
static void Main(string[] args)
{
int i = 123;
object o = i; //装箱
i = 456; //改变i的内容
Console.WriteLine(“值类型的值为 {0}”, i);
Console.WriteLine(“引用类型的值为 {0}”,o);
}
当改变i的值时,因为i是值类型,所以只能改变他自己的值,而无法修改引用类型object的类型
不同类型的参数传递
概述
使用值传递,在方法中对参数值得更改在调用后不能保留
使用ref方式传递,可以保留对参数值的更改
值方法参数传递
在值方法参数传递时,参数可以是引用类型,也可以是值类型
引用方式参数传递
在引用方法参数传递时,参数同样可以是引用类型,也可以是值类型。