c#理论问题

来源:百度知道 编辑:UC知道 时间:2024/06/30 06:40:32
1、我们说静态的字段不用NEW此类 直接可以用类名点上字段名既可使用
但如程序只不要NEW类的话 不会在内存中开辟空间 这个很矛盾!谁能解释下?
2、我们说String是 引用类型,我们知道他在栈中开辟的引用变量指向堆中的内存地址 例如这样的 类型 我们用 == 或 Equals 比较 应该是==比较引用 反而Equals 是比较堆中的值 有的书上说 用==和Equals 是 一样的效果?为什么?

呵呵。
第一个问题,
当你做一个静态方法时(或字段),你无须new其所在的类,就可以引用它,这并不是说它没有在内存中开辟空间。而是在程序加载时,静态方法已经加载了,所以,无须new就可以使用。

第二个问题,
string不能简单的说成引用类型,它是引用类型不假,但是它是个奇怪的引用类型,因为它的操作方法极类似于值类型。
举个例子吧。
一般的引用类型操作
(不好意思,敲了一下回车,就提交了,才写了一半)
Class1 c1=new Class();
Class1 c2=c1;
如上,c1与c2其这是指向一个引用,所以可以说它俩一样。
但是,
string str1="aa";
string str2=str1;
然后,改动str1="bbb";str2也会变。

str1与str2在引用同一个,呵呵;这是引用类型。但是,你用==号或是Equals 来比较,却是false。呵呵,看起来它们是值类型。
具体的编译的原理,一时半会儿讲不清了,你理解就行了。

1、静态类在程序启动的时候就分配空间,在程序的静态存储区中。目的:避免重复创建对象,避免方法或者常量与对象绑定。优势:可以节约内存,访问方便(像全局变量一样)
可能还有,记不全,大致是这个样子
2、这个问题比较麻烦了,string就是一种特殊的引用类型,CSDN上有篇文章,说的清楚多了,推荐你看一看
http://blog.csdn.net/newmoon2004/archive/2007/08/13/1740989.aspx