【问题标题】:Is this pass by reference or pass by value [duplicate]这是按引用传递还是按值传递[重复]
【发布时间】:2015-01-12 20:12:06
【问题描述】:

所以我在课堂上被问到这个问题。

consider the following method declaration:

       public static int method(int[] x)

Is the int[] x parameter passed by reference or by value?

据我了解,只有原语可以按值传递。因此这是通过引用传递的?我从这里 (Are arrays passed by value or passed by reference in Java?) 读到“java 只能按值传递”并且指向对象数组 x 的引用作为值传递。

那么答案是什么? int[] x 参数是按引用传递还是按值传递?

由于java不能做到这一点,有人还可以给我一个通过引用传递的例子吗?

非常感谢

【问题讨论】:

  • 在 java 中,everything 都是按值传递的。唯一的区别是,对于对象,传递一个包含对象引用的值。
  • 注意:int[] x 是对int 数组的引用,而不是数组。

标签: java arrays pass-by-reference pass-by-value


【解决方案1】:

Java 按值传递引用,但对象本身不按值传递,也不复制。 只需更改传递给某个函数的数组内部的某些内容,然后在外部查看它。你会看到它变了

【讨论】:

    【解决方案2】:

    Java 中的一切都是按值传递的。考虑你的功能:

    public static int method(int[] x) {
    
    // If you change x here, it won't get reflected in the x. Because you pass a copy of the 
    // original x.
    
    }
    

    【讨论】:

    • 如果你在这里改变 x,它不会反映在 x 中 不完全是。如果您重新分配 x,这不会修改原始 x。如果您将任何元素更改为 x,它们将被保存。
    • 是的。见this demo
    • @BackSlash 我认为需要对静态/非静态范围进行澄清。您可以证明这一点,但这仅仅是因为您正在从另一个静态方法调用静态方法。这不适用于非静态上下文。
    • Are you sure? 你可以有静态或非静态上下文,我的例子可以工作。这就是java的工作原理。当您将对象传递给方法时,会创建对象的 reference 的副本,而不是对象本身的副本。因此,您将无法更改对象的引用,但您将能够更改对象的属性。这就是为什么您不能重新分配 x 但可以更改其内容
    猜你喜欢
    • 2012-03-20
    • 1970-01-01
    • 2013-02-09
    • 2013-05-03
    • 2016-11-28
    • 2017-11-14
    相关资源
    最近更新 更多