我是C#学生,当我学习代码阅读时,我对此代码有疑问
public class Solution {
public int solution(int[] priorities, int location)
{
int answer = 0;
Queue<KeyValuePair<int, int>> que = new Queue<KeyValuePair<int, int>>();
for(int i = 0; i < priorities.Length; i++)
{
que.Enqueue(new KeyValuePair<int, int>(i, priorities[i]));
}
}
据我所知,new
运算符用于在引用类型的对象中创建实例,如下所示:
Queue<KeyValuePair<int, int>> que = new Queue<KeyValuePair<int, int>>();
(因此que
是在堆栈中制成的,而new
是在堆中分配内存的。
但是:
que.Enqueue(new KeyValuePair<int, int>(i, priorities[i]))
在此代码中,new
的行为没有变量。
(请注意,我发现KeyValuePair <>是结构类型,我想知道为什么值类型使用“新” ...我们不像值int a= new 3
中使用“新”)
我想知道会发生什么
plz教我
谢谢
答案 0 :(得分:6)
表达式new MyType()
创建一个MyType
的实例-分配内存。
在编写MyType m = ...
时,您只是将变量分配。这不会分配任何东西。
因此,这两个表达式是完全独立的。您可以分配(直接)之前没有创建的内容:
MyType m = new MyType();
MyType m2 = m; // just re-reference the instance created above, no memory allocation here
,您还可以创建一个对象并且不对其执行任何操作(尽管通常这是一个坏主意):
new MyType();
对于que.Enqueue(new KeyValuePair<int, int>(i, priorities[i]))
,您创建一个KeyValuePair
,但将其分配给方法item
-参数。
您还可以将该对象存储到新变量中,并将其传递给方法:
var kv = new KeyValuePair<int, int>(i, priorities[i]);
que.Enque(kv);