在 C# 中,当我声明一个这样的数组时:
int []a = {1, 2, 3, 4, 5}
这是在堆栈中声明的吗?
据我所知,我应该这样做:
int []a = new int[5]{1, 2, 3, 4, 5};
考虑到数组是引用类型。
在 C# 中,当我声明一个这样的数组时:
int []a = {1, 2, 3, 4, 5}
这是在堆栈中声明的吗?
据我所知,我应该这样做:
int []a = new int[5]{1, 2, 3, 4, 5};
考虑到数组是引用类型。
这两者之间没有区别。
第一个只是一个语法糖 ( MSDN ) 来保存几个击键。
它们都(只要它们是相同的数组)都在堆中声明,并且引用在堆栈中声明。因此,只要您超出范围-对象就会变得未被引用并且有资格被垃圾收集。
实际上有一种方法可以将数组存储在堆栈中:
(来自http://www.c-sharpcorner.com/uploadfile/GemingLeader/creating-a-stack-based-array/)
int* pArr = stackalloc int[length];
但这需要一个不安全的代码区域,因为使用了指针。
你们两种语法都将在堆上声明,因为 int 是值类型
int[] a = {1, 2, 3, 4, 5 } 这种语法是另一种语法的简写