实值型别:传递资料时,创建新资料并复制实际数值。
参考型别:传递资料时,直接传递该资料在内存的位置,也因此没有产生新资料。
string 使用起来很像实值型别,然而它实际上是参考型别。 (很基本而且重要,请务必记得)
之后才会提到的 class (类别),也是参考型别。
null 是参考型别专用的关键字,代表“不指向任何内存位置”。
同时,参考型别的预设值一定是 null。
由于一般的实值型别的值无法为 null,因此通常你也可以想成可以指定成 null 的资料是参考型别。
然而在参考型别,== 用来判断 2 个变数是不是参考到同一个内存位置。
用白话一点的方法来说,判断 2 个变数是不是出自同一个内存位置。
这时候就该来谈谈参考,当我们透过参考修改某个资料,实际上是改动了该参考的目标内存中的资料。
这个改动一旦发生,其他参照到相同内存位置的参考,拿到的值也会发生改变。
这个例子在下面范例的 17 ~ 22 行可看到。
我们在 DoubleIntArray 传进 a1 的参考,在该方法内的改动仍然会影响到 a1 本身。
然而,这种特性在实质型别不会发生。
此外,由于 string 型别本身有特别处理,因此看起来没有这种影响。