解决方案 »

  1.   

    int是值类型,他俩不会各是各的
      

  2.   

    地址是一个范围,首地址是开头的第一个地址。
    系统分配的,如int i,在栈;new操作的内存在堆。
      

  3.   

    到底是看什么书会把C#和Java混合起来当C++来教啊。首先,C#有运算符重载机制,和Java中的==不同,不能一概而论。
    其次,C#和Java一般都避免提及“地址”,而是使用“引用”。因为在GC的作用下,对象在内存中的位置会移动,一般来说一个对象是没有固定的地址的,运行时(CLR或JVM)会维护这些对象的引用,以确保引用的有效性。
    最后,在没有运算符重载时,==执行值比较。那么所谓的“比较内存首地址”应该是指“比较引用是否相等”。注意引用是针对对象的,而int这样的是值类型,在比较时CLR直接将其值压栈并执行比较,这个过程中没有任何“首地址”或者类似的东西出现。
    堆和栈在这里并不是一个确定的数据结构,而更接近于一种概念,在实现上它们在不同平台上不一定相同,但拥有相同的特性。一般来说,栈上储存的是局部变量,堆则是动态分配的内存,引用类型的实例或者装箱的值类型实例都储存在堆上。举个例子
    当你声明一个局部变量int a时,CLR会在栈上分配4字节的空间,这个空间直接储存a的值
    当你声明一个局部变量object o时,CLR会在栈上分配一个引用大小的空间,这个空间储存一个引用(初始化为空引用)。
    当你声明并初始化一个局部变量object o2 = new object()时,CLR会在栈上分配一个引用大小的空间,随后在堆上创建一个object对象,再令o2储存的引用指向新建的对象。
      

  4.   

    额  这一下太深奥了 ,简单点 让我们初学者明白吧。什么ClR不明白  能打个比方吗呵呵