0

我在我的手机上,所以我不能自己测试。另外,我可能会错过一些东西。

我知道当分配一个数字时,比如a = b,b实际上被复制到a中。但是,如果 b 是一个对象,则只会传递一个引用。其他类型呢?有什么我需要担心的吗?

另外,我听说你不能在 C# 中使用指针,因为变量会被 JC 移动。Javascript中是否相同?那么这些参考文献是如何用这些语言解决的呢?

4

1 回答 1

1

javascript 根据规范,您有类型:undefined、null、boolean、string、number、object。你可以认为它们是不可变的,除了对象,它实际上只是一个(散列)映射。所以是的,如果你分配变量,它是“复制的”(你不在乎它是否真的是),除非它是一个对象类型。举个例子:

var x = "hello";
var y = x; //copy or reference, who cares?
x += " world"; //new string object, x references it
alert(y); //alerts hello

C# 根据 C# 2.0 规范,有结构/值类型类/引用类型。因此,从实际的角度来看,值类型的变量实际上将数据存储在调用堆栈上(并在赋值时被复制),而引用类型的变量只是一个引用(数据进入堆)。例子:

int holds_a_value = 5;
StringBuilder holds_a_reference = new StringBuilder();

您可以在 C# 中使用指针(指针 = 引用),但如果您在 .net / C# 之外调用不安全函数或使用不安全代码,则必须固定它们。例如:

fixed (int* p = something) { /*p is safe to use, memory doesn't move */}
于 2012-06-24T09:23:25.153 回答