有一简单语言问题请教
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对象