【问题标题】:Pass object by reference in Java [duplicate]在Java中通过引用传递对象[重复]
【发布时间】:2011-08-28 00:41:58
【问题描述】:

可能重复:
How to pass by reference in Java

在Java中是否可以通过引用传递对象

就像在 C# 中一样

public static void SomeMethod(ref Object obj)
{
...
}

【问题讨论】:

  • 我认为所有对象在java中都是通过ref隐式传递的
  • @soul 不。 Java 中的所有内容都是按值传递的,包括引用
  • 这个问题已经被问了几十次了。其中之一是:How to pass by reference in Java
  • 默认情况下,Java 中没有,所有内容都是按值传递的……我感兴趣的是有没有办法通过引用传递。
  • 在此处查看我的答案以了解解决方法。 stackoverflow.com/q/3997518/2598

标签: java


【解决方案1】:

不,这在 Java 中是不可能的。

在 Java 中,方法的所有参数都是按值传递的。请注意,作为对象引用的非原始类型的变量也是按值传递的:在这种情况下,引用按值传递。请注意,按值传递引用与按引用传递不同。

【讨论】:

  • 你可以传入一个可变引用的 'holder' 对象。一个简单的实现是 1 个元素的 ArrayList。通常您只需要多个输出,在这种情况下您可以使用 Pair 或元组类型。
  • @karmakaze 是的,这是一种解决方法,但在 Java 中不可能像在 C# 或 C++ 中那样获得真正的按值传递。
  • @Jesper 您能否详细说明按值传递引用和传递引用之间的区别?这些在我看来都是一样的。
  • @kingfrito_5005 通过引用传递意味着方法可以直接更改从调用方法传递的变量。 Java 不支持这一点 - 如果您更改方法中的变量,则调用方法中的变量不会更改。变量值的副本被传递给方法 - 而不是变量本身。
【解决方案2】:

没有。 Java 只是按值传递。

你不应该要求这样的东西。您可以传递对象并更改其字段 - 这将反映在调用者中。

【讨论】:

    【解决方案3】:

    对象的所有变量都是对该对象的引用。当您将对象传递给方法时,您已经在传递对象的引用。如果不希望原始对象受到影响,则必须先克隆它。

    【讨论】:

    • 准确简洁的回答
    • 问题询问如何通过引用(2层)传递对象的引用,这就是给定的c#代码所做的。我认为这个答案误解了问题
    【解决方案4】:

    传递引用数据类型参数

    参考数据类型参数,如 作为对象,也被传入 按价值的方法。这意味着当 方法返回,传入的 参考仍然引用相同的 对象和以前一样。 但是,值 可以更改对象的字段 在方法中,如果他们有适当的 访问级别。

    来源: Java Tutorial > Passing Information to a Method or a Constructor

    【讨论】:

      【解决方案5】:

      您必须创建一个参考类。幸运的是,有一个。尝试查看AtomicReference。请注意,它是为并发设计的,所以它可能不适合。

      另一个想法是传递一个长度为 1 的 Object 数组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-24
        • 1970-01-01
        • 2011-12-12
        • 2016-05-27
        • 2023-03-09
        • 2013-05-16
        相关资源
        最近更新 更多