【问题标题】:Passing by reference vs by value in Java [duplicate]Java中的引用传递与值传递[重复]
【发布时间】:2013-04-08 11:06:56
【问题描述】:

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

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

我错了吗?

【问题讨论】:

  • 据我了解,与 C 或 C++ 程序员交谈时,我会说对象指针是按值传递的,因此在函数中您可以修改原始对象,但不能覆盖原始引用给它。但我对 Java 的了解几乎为 0。
  • 严格意义上来说,C 也没有按引用传递 它像 Java 一样具有“按指针传递”。这与 C++ 形成鲜明对比,C++ 具有真正的参考传递。
  • 谢谢。你很真实。 C 没有通过引用传递。现在我了解了 Java、C 和 C++ 的区别。

标签: java c++ c parameter-passing


【解决方案1】:

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

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

【讨论】:

  • "(invisible)" 它不是隐形的。只是Java中对象指针的语法不同。
猜你喜欢
  • 2014-09-10
  • 2013-12-02
  • 2012-03-12
  • 2013-09-15
  • 2012-03-13
  • 2014-11-29
  • 1970-01-01
  • 2011-05-16
  • 2021-11-04
相关资源
最近更新 更多