我在手机上,所以我无法自己测试。另外,我可能会错过一些东西。
我知道当分配一个数字时,比如a = b,b实际上被复制到一个。但是,如果b是一个对象,只需要传递一个参考。什么与其他类型?有什么我应该担心的吗?
另外,我听说你不能在C#中使用指针,因为变量会被JC移动。它在Javascript中是一样的吗?那么这些语言如何用这些语言解决?
答案 0 :(得分:1)
<强>的javascript 强> 根据规范,您有类型:undefined,null,boolean,string,number,object。您可以将它们视为除了对象之外的 immutable ,它实际上只是一个(哈希)映射。 所以是的,如果你分配变量,它就会被“复制”(你不关心它是否真的如此),除非它是一个对象类型。举个例子:
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#之外调用不安全的函数,则必须引脚 ,或使用不安全代码。 e.g:
fixed (int* p = something) { /*p is safe to use, memory doesn't move */}