日期:2014-05-19  浏览次数:20602 次

有一简单语言问题请教
int   i;
object   c;

前者是值类型,后者是引用类型.

是不是当执行第一句时,产生了一个确实的i的变量,并自动初始化为0.
当执行第二句时,仅仅是产生了一个引用,而并没有产生与之相对应的对象,必须使用new操作符才会有确定的对象?

再就是string到底是值类型还是引用类型?

------解决方案--------------------
string是引用类型
------解决方案--------------------
是不是当执行第一句时,产生了一个确实的i的变量,并自动初始化为0.
==============================================================
如果你的i是临时变量的话,那不会自动帮你初始化为0,只有为字段时,当初始化对象时,就会自动初始化为0

当执行第二句时,仅仅是产生了一个引用,而并没有产生与之相对应的对象,必须使用new操作符才会有确定的对象?
==============================================================
说的很对

再就是string到底是值类型还是引用类型?
=====================================
一种很特别的引用类型
------解决方案--------------------
string是引用类型
------解决方案--------------------
string str1= "ABC ";

str1=str1+ "DEF ";

...

这样下去在内存中不只是一个 str1 存在, 而是 "ABC " , "ABCDEF ",....这样的新字符串(明显耗费资源)

str1最后之所以是 "ABCDEF ", 只是str1 指向了最后生成的 字符串.
------解决方案--------------------
string是引用类型

1. string继承自object,而不是System.ValueType(Int32这样的则是继承于System.ValueType)
2. string本质上是个char[],而Array是引用类型,并且初始化时也是在托管堆分配内存的

string是“不会变”的,每次操作string,都相当于新建了一个string对象