初学者心态

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

要想了解"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() 效果一样

说出了值类型和引用类型的本质区别,一个是在栈上,它的变量直接包含变量的实例,使用效率比较高。一个是在托管堆上,引用类型的变量通常包含一个指向实例的指针,变量通过该指针来引用实例。

posted on 2012-11-14 23:31  初学者心态  阅读(519)  评论(0编辑  收藏  举报