C#中有哪些数据类型是 值类型: 数值类型(byte short int long)、bool类型、char类型、枚举、结构
引用类型:数组、string、类、接口、委托
所有的值类型继承自ValueType,所有的引用类型都继承自Object。
相同点:当变量作为一个局部变量的时候,无论这个局部变量的类型是引用类型还是值类型,这个变量始终开辟在栈空间之中。
当变量作为一个成员变量的时候,无论这个变量的类型是引用类型还是值类型的,这个成员变量跟随者对象一起开辟在堆空间之中。
因为字段属于对象的
不同点:
存储结构不同:值类型变量存储的是真实的值,直接存储在栈空间中。
引用类型变量存储的是对象的地址,这个对象存储在堆空间中中。
因为两个类型变量存储的值不相同,不同类型的变量相互赋值的时候:
1、首先,变量之间互相赋值,将原变量的值赋值一份给另一个变量。
2、值类型变量之间赋值:因为值类型变量存储的是真实的值,所以复制传递的也是真实的值,赋值完以后,对一个变量修改不会影响到另一个变量。
int num1 = 2; int num2 = num1; num2=5;
Console.WriteLine(num1 + " " + num2); 输出结果是 2 5
引用类型变量之间赋值:因为饮用类型变量存储的是对象的地址,所以复制传递的也是地址。赋值完以后,两个变量指向了同一个对象,对一个变量修改会影响另外一个变量指向的对象。
string[] arrStr1 = new string[1] { "我是数组1" };
string[] arrStr2 = arrStr1;
arrStr2[0] = "我是数组2";
Console.WriteLine(arrStr1[0]);
Console.WriteLine(arrStr2[0]);
输出结果是:
我是数组2
我是数组2
文中的不足之处,还请读者指出。
引用类型:数组、string、类、接口、委托
所有的值类型继承自ValueType,所有的引用类型都继承自Object。
相同点:当变量作为一个局部变量的时候,无论这个局部变量的类型是引用类型还是值类型,这个变量始终开辟在栈空间之中。
当变量作为一个成员变量的时候,无论这个变量的类型是引用类型还是值类型的,这个成员变量跟随者对象一起开辟在堆空间之中。
因为字段属于对象的
不同点:
存储结构不同:值类型变量存储的是真实的值,直接存储在栈空间中。
引用类型变量存储的是对象的地址,这个对象存储在堆空间中中。
因为两个类型变量存储的值不相同,不同类型的变量相互赋值的时候:
1、首先,变量之间互相赋值,将原变量的值赋值一份给另一个变量。
2、值类型变量之间赋值:因为值类型变量存储的是真实的值,所以复制传递的也是真实的值,赋值完以后,对一个变量修改不会影响到另一个变量。
int num1 = 2; int num2 = num1; num2=5;
Console.WriteLine(num1 + " " + num2); 输出结果是 2 5
引用类型变量之间赋值:因为饮用类型变量存储的是对象的地址,所以复制传递的也是地址。赋值完以后,两个变量指向了同一个对象,对一个变量修改会影响另外一个变量指向的对象。
string[] arrStr1 = new string[1] { "我是数组1" };
string[] arrStr2 = arrStr1;
arrStr2[0] = "我是数组2";
Console.WriteLine(arrStr1[0]);
Console.WriteLine(arrStr2[0]);
输出结果是:
我是数组2
我是数组2
文中的不足之处,还请读者指出。