常见的值类型:int,long, short, float, double, byte, char, enum, struct......
常见的引用类型:字符串, 数组, 类......
区别:值类型用来存放实际数据,而引用类型用来存放对象引用(并不是对象本身,而是对象在堆内存空间的内存地址)
值得注意的是,引用类型存储在内存堆中,而值类型根据声明类型存储在不同的位置,如果作为方法的局部变量则会存储在内存栈中,但作为对象的实例成员会随对象一起存放在内存堆中。
例如:
class Program
{
static void Main(string[] args)
{
Student st1 = new Student();
Student st2 = new Student();
st1.id = 1;
st2 = st1;
Console.WriteLine(st1.id);
Console.WriteLine(st2.id);
}
}
public class Student
{
public int id;
}
输出为:
而当修改st1.id时:
class Program
{
static void Main(string[] args)
{
Student st1 = new Student();
Student st2 = new Student();
st1.id = 1;
st2 = st1;
Console.WriteLine(st1.id);
Console.WriteLine(st2.id);
st1.id = 2;
Console.WriteLine(st1.id);
Console.WriteLine(st2.id);
}
}
public class Student
{
public int id;
}
输出:
说明st2 = st1;这一句实际上做的的将st1对象的地址赋值给st2,则二者都指向堆内存中的同一个对象,所持有的成员变量都是相同的。