值与引用类型——为什么两者都存在?

Value vs Reference types - why do both exist?

我知道两者是什么,价值和参考,但我的问题是为什么两者都存在?

我的意思是为什么所有基元都没有被引用(或被这样对待)?我知道原语不受垃圾收集器的影响,我认为这是一个缺点,而且我找不到它们的任何优点,所以我错过了什么?

我能很快想出的两个原因:

  1. 因为引用可以被调用的函数改变,所以它可能有副作用。
  2. 另外,部分出于历史原因,传递一个 char/byte 或 2 个字节只需要 1 或 2 个字节,而引用通常是 4 个字节。

I know the primitives aren't affected by garbage collector, which i see as a drawback,

为什么?您更喜欢更多的开销和更低的性能?我使用得当,值类型和不依赖垃圾收集器是一个非常显着的性能优势。

I mean why all primitives aren't also reference (or treated as such)? I know the primitives aren't affected by garbage collector, which i see as a drawback

考虑以下非常常见的代码:

 for (var i = 0; i < 1000; i++)
     for (var j = 0; j < 1000; j++)

现在想象一下,每秒调用一次……这将是每秒创建 1 000 000 个引用类型,这些引用类型必须在堆中分配、跟踪并由 GC 收集。你会认为这是一个优势吗?再想想...