4

我来自 C/C++ 世界。我注意到在许多帖子中人们不接受说在 Java 中有“通过引用传递”(对于非基元);他们的论点是,在这种情况下,引用的副本被获取。我无法理解这个理由,因为当我们通过引用传递时,这实际上是 C 中发生的事情(获取了指针的副本)。对于我对Java的一点了解,我会说:

  • 原始类型按值传递。
  • 非原始类型通过引用传递。

我错了吗?

4

1 回答 1

4

在 C++ 中,考虑函数:void func(Type &arg);. 在这里,如果你改变arg了(不是arg 的内容,而是实际的变量),调用者对传入参数的看法已经改变了——完全改变了。这是通过引用传递。与之对比void func(Type *arg);。在这里,您可以更改的内容,arg但如果您分配arg给某些内容,则由于指针的按值传递,这只是局部更改。

在 Java 中,您在所有复杂类型上使用传递(不可见)指针。

于 2013-04-08T11:11:55.170 回答