先看概括图:
值类型:
创建与初始化:
形式:
{修饰符} 类型 标识符{,标识符};
{修饰符} 类型 标识符{=初值} {标识符={初值}};
即:
public int i;//说明i为公有int类型变量
引用类型:
创建于初始化:
(1)object类型
形式:
object 标识符{=数值};
即:
object obj; //说明obj为object类型变量
object obj2=10.25 ; //说明obj2为object型变量并初始化
(2)string类型
形式:
string 引用标识符{=字符串字面值};
即:
string s //创建一个字符串的引用
string s=new string("zhudan") //创建一个新的字符串,并保存引用
值类型与引用类型区别:
namespace _1
{
class ValueClass //定义类
{
public int value = 0;
}
class ValueAndRefType //定义类
{
public static void Main() //方法
{
int a = 0; //a的初始变量未整型0
int b = a;
b = 10;
ValueClass ref1 = new ValueClass(); //创建类对象ref1
ValueClass ref2 = ref1; //创建类对象ref2,并赋值ref1
ref2.value = 10;
Console.WriteLine("Value:{0},{1}", a, b); //对变量ref2重新赋值
Console.WriteLine("Refs:{0},{1}", ref1.value, ref2.value); //通过ref2重新赋值,影响了ref1和ref2所引用对象
}
}
}
运行结果:
Value:0,1
Refs:10,10
由此例可以得知:
区别1:值类型的变量包含自身的数据,而引用类型的变量包含的是指向数据的内存块的引用。
区别2:值类型的变量都有一份自己的数据拷贝,因而不可以通过操作其中的一个来影响另一个,而对于引用类型,两个变量有可能引用同一对象,因而,可以通过操作一个变量来影响另一个变量。
装箱与拆箱:
装箱:将值类型转换为object类型,是一个数值分配一个对象实例,并把这个数值拷贝到新对象中。
例如:
int num =1025; //值类型
object obj = num; //num被装箱到obj
拆箱:将object类型转换为值类型
例如:
int num =1025; //值类型
object obj = num; //num被装箱到obj中
int num2 = (int)obj; //拆箱返回到int
注意:装箱时不需要显示地强制类型转换。拆箱时,则必须进行强制类型转换。这是因为在拆箱情况下,一个对象可以强制转换到任何类型。