要想了解"int i=1" "int i=new int() "和“String str = "a";” “String str = new String("a")”区别,先要了解c#值类型和引用类型区别,以及c#对值类型和引用类型的处理。
值类型:整型、布尔型、字符型、实数型、结构型、枚举型。
引用类型:类、对象、字符串、数组、接口、委托。
注意字符是值类型,字符串是引用类型。
http://www.sosuo8.com/article/show.asp?id=2184讲的非常好
csdn这个帖子讨论的关于这个问题:http://bbs.csdn.net/topics/310247427
这个回答基本正确:
String str = "a"; 这个只是一个引用,内存中如果有“a"的话,str就指向它
String str = new String("a");是根据"a"这个String对象再次构造一个String对象,将新构造出来的String对象的引用赋给str
int i = new int();完全等效于int i=0;,因为int的默认构造函数就是赋默认值0
而且值类型的默认构造函数是可以隐式调用
int a = 0和 int b= new int() 效果一样
说出了值类型和引用类型的本质区别,一个是在栈上,它的变量直接包含变量的实例,使用效率比较高。一个是在托管堆上,引用类型的变量通常包含一个指向实例的指针,变量通过该指针来引用实例。