在Java中按引用传递与按值传递

Passing by reference vs by value in Java

本文关键字:按值传递 按引用传递 Java      更新时间:2023-10-16

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

  • 基本类型是按值传递的。
  • 非基本类型通过引用传递。

我错了吗?

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

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