换个角度,class这样的引用类型的实例对象,包括有一个Heap上的内存块和一个指向该内存块的指针对应。该内存块中分配有class中数值类型的空间。你回复中的x在堆上,就是说的属于class实例对象的内存块中的。public void somemethod() { int x = 0; // 这个x变量是值类型的,分配在stack上 Class1 c = new Class1(); // Class1的实例对象,其内存块分配在Heap上的,但c的引用是在Stack里的 c.x = 5; // 通过引用,找到在堆上内存块里的值类型成员x }class Class1 { public int x = 0; }
记得那个推荐帖的猪脚说C++转C#三天就足够了,LZ你应该多像他学习啊
多谢大牛了 顺便也谢谢caozhy了。真是抱歉了 ,才20分, 我当时给分太少了, 回复我这么多,
你好,我再问个问题啊, 在类中, 我举个例子class A { private static int size=50; }用了static 修饰之后,那么这个变量应该不是放在堆栈中吧?而是静态区中吧, 如果把static 换成const之后呢? 是不是就放在了,常量区了? 不知道我的理解对不对?望指教一下
数组时引用类型,因此数组元素放堆里。字符串是unicode编码
{
int x = 0; // 这个x变量是值类型的,分配在stack上
Class1 c = new Class1(); // Class1的实例对象,其内存块分配在Heap上的,但c的引用是在Stack里的
c.x = 5; // 通过引用,找到在堆上内存块里的值类型成员x
}class Class1
{
public int x = 0;
}
顺便也谢谢caozhy了。真是抱歉了 ,才20分, 我当时给分太少了, 回复我这么多,
{
private static int size=50; }用了static 修饰之后,那么这个变量应该不是放在堆栈中吧?而是静态区中吧, 如果把static 换成const之后呢? 是不是就放在了,常量区了?
不知道我的理解对不对?望指教一下
static 换成const的区别是前者是运行时只读,后者是编译时已经就用你声明的常量替换到程序里面去了(就好像你从来没有声明过这个常量一样)
并且在应用程序上下文中,只会在栈上分配一次(值/引用)