通过设计:
有人会错误地说对象是“通过引用”传递的。在编程语言设计中,术语“按引用传递”正确表示在将参数传递给函数时,调用的函数将获得对原始值的引用,而不是其值的副本。如果函数修改了其参数,则调用代码中的值将被更改,因为参数和参数使用内存中的同一插槽…。Java编程语言不会通过引用传递对象;它按值传递对象引用。由于相同引用的两个副本引用了相同的实际对象,因此通过一个引用变量进行的更改将通过另一个变量可见。仅有一种参数传递模式-
按值传递-有助于简化操作。-詹姆斯·高斯林(James Gosling),
至于更深层次的原因,这是我的看法:这是两个事实的结合:
- 高斯林引文的最后一行:“ …可以使事情保持简单…”
- 与C ++不同,Java是在堆上分配的所有对象中进行垃圾回收。
如果您不喜欢第一个,我无能为力。您必须告诉James Gosling和Bill
Joy以及其他所有设计Java的人,他们犯了严重错误。祝你好运。通过几种方法,如今Java比C
++广泛使用。尽管市场不完善,但是您并没有因为您的疏忽而对Java进行了惩罚。
C
++中的按值传递给开发人员(例如,分配和复制构造函数的要求)和编译器编写器(例如,区分堆栈变量和堆变量,按值传递和使用const和非const进行引用的所有排列)带来负担。
第二个可能除了设计师的品味之外,还有更多的技术解释。我不是垃圾收集系统的设计和实现专家,但是也许由于我不知道的技术原因影响了他们的选择。



