什么是对象:
• 一个类的局部变量存在于栈(stack)中
不是被预先赋值的
可以被初始化为null或调用构造函数进行初始化
(下面的例子中Pair类的声明请看前面,右边显示的是内存中的情况,@表示指向)
栈堆代码示例:
static void Main()
{
Pair p; p ?
}
static void Main()
{
Pair p = null; p null
}
static void Main()
{
Pair p = new Pair(); p @ 0 .X
}
0 .Y
代码说明:
虽然类的声明和结构的声明非常类似,但类与结构是两个不同的类型。结构是值类型,而类是引用类型。无论类的实例多大,类的局部变量只是这个类实例的一个引用。
上面例子中的最上面的那段程序定义了一个Pair类的局部变量p。不管Pair类包含什么成员,p只是存在存在于栈中的一个引用。因为p没有被初始化,所以这个引用没有被赋值,p也就不能被使用。
上面例子中的中间的那段程序定义了一个Pair类的局部变量p。p被初始化为null,所以p没有指向任何对象。p已经被赋值,所以p也就能被使用。
上面例子中的最下面的那段程序定义了一个Pair类的局部变量p。由new新生成一Pair类对象,这个新产生的对象产生在堆(heap)中,然后p通过赋值指向这一堆中的对象,而p是被定义为存在于栈中。p已经被赋值,所以p也就能被使用。
new对于类来说是产生一堆中的对象,而对于结构来说是在栈中产生一个值,这可能需要一段时间的适应。