通过引用传递vs Java中的值

时间:2013-04-08 11:06:57

标签: java c++ c parameter-passing

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

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

我错了吗?

1 个答案:

答案 0 :(得分:4)

在C ++中,考虑函数:void func(Type &arg);。在这里,如果您更改arg(不是 的内容而是实际变量),则调用者对传入参数的视图已完全更改。这是通过引用传递的。与void func(Type *arg);对比。在这里,您可以更改arg的内容,但是如果您将arg分配给某个内容,则由于指针的值传递,它只是本地更改。

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