【问题标题】:arrays passing to methods in Java - What is passed here? Value or Reference?数组传递给 Java 中的方法 - 这里传递了什么?价值还是参考?
【发布时间】:2015-04-17 04:09:40
【问题描述】:

当我将对象引用(数组是对象)传递给方法时,值会被传递,对吧?

在下面的代码中,初始值为:333。方法通过后,值发生了变化。为什么?在这种情况下是引用传递而不是值吗?

数组是“特殊情况”吗?

public static void main(String[] args) {
    int[] myArray = { 333 };
    valueOrRef(myArray);            // Value or Reference?
    System.out.println(myArray[0]); // 777 (changed)
}

public static void valueOrRef(int[] myArgument) {
    myArgument[0] = 777;
}

另一种方法:(逻辑“传值”):

public static void main(String[] args) {
    int[] myArray = { 333 };
    valueOrRef(myArray[0]);         // Value or Reference?
    System.out.println(myArray[0]); // 333 (after method still unchanged)
}

public static void valueOrRef(int myArray2) {
    myArray2 *= 2;
}

【问题讨论】:

  • 传递了对数组的引用。但是这个引用是按值传递的。
  • 作为副本关闭的问题在更一般的层面上解决了这个问题,而不是专门针对数组。除了那里提供的答案之外,还必须意识到数组是一个对象,并且诸如{ 333 } 之类的初始化表达式会将数组放在堆上。

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


【解决方案1】:

值总是被传递,但请记住,对于数组,值实际上是对数组的引用,而不是数组本身。

第一个valueOrRef 方法改变了myArgument 指向的数组的内容,这就是为什么您在调用该方法后会看到对数组的影响。

【讨论】:

  • Java 中的一切都是按值传递的。 Java 没有按引用传递(对象引用,包括数组引用,都是按值传递的。)
猜你喜欢
  • 1970-01-01
  • 2012-02-03
  • 1970-01-01
  • 2015-02-06
  • 2011-01-02
  • 1970-01-01
  • 2019-10-02
  • 2012-02-26
  • 2021-12-26
相关资源
最近更新 更多