如何在执行方法时传递引用?

时间:2014-03-21 14:42:59

标签: java arraylist reference stack heap

这是我的民主类,我试图实现切换机制并试图弄清楚在执行方法时如何传递对象引用: 这是我的主要演示类:

package referenceOrValue;

import java.util.ArrayList;

public class DemoFoo {
public static void main(String[] args) {
    ArrayList<String> demoArray = new ArrayList<>();
    ArrayList<String> arrayList = new ArrayList<>();

    arrayList.add("a");
    arrayList.add("b");
    arrayList.add("c");
    demoArray.add("d");
    demoArray.add("e");
    demoArray.add("f");


    System.out.println("The arraylist  is " + arrayList);
    System.out.println("The demo array is " + demoArray);
    Foo foo = new Foo();    


    //foo.setNull(arrayList);
    foo.switching(arrayList, demoArray);
    System.out.println("The arraylist  after switch " + arrayList);
     System.out.println("The demo array after switch " + demoArray);




}

}

现在有一个像这样的foo类,其唯一的功能是交换arraylist中的值:

package referenceOrValue;

import java.util.ArrayList;

public class Foo {

public void switching (ArrayList<String> a, ArrayList<String> b){

    ArrayList<String> temp=null;
temp=a;
a=b;
b=temp;
System.out.println("The arraylist  inside switch " + a);
System.out.println("The demo array inside switch " + b);
}
}

现在主要问题是输出: - (

The arraylist  is [a, b, c]
The demo array is [d, e, f]
The arraylist  inside switch [d, e, f]
The demo array inside switch [a, b, c]
The arraylist  after switch [a, b, c]
The demo array after switch [d, e, f]

根据我的知识,这个切换应该已经正确执行了但结果对我来说有点令人惊讶,因为在切换方法中我没有创建新对象:

a= new ArrayList<>();

所以“a”仍然指的是[a,b,c]并且在切换操作期间,值在输出中显示的方法中改变,但是主类没有改变对象。 请帮忙!!

1 个答案:

答案 0 :(得分:0)

直接将数组列表传入方法...

  1. ...参数 a 引用与main方法中的变量 arrayList 相同的数组列表
  2. ...参数 b 引用与main方法中的变量 demoArray 相同的数组列表。
  3. 但在打印出内容之前,请切换参考!所以在你打印内容的时候......

    1. ...参数 a 引用与main方法 demoArray 相同的数组列表
    2. ...参数 b 引用与main方法中的变量 arrayList 相同的数组列表。
    3. 由于Java始终按值传递,因此主方法中的变量(仅包含引用)不受影响。所以他们打印出与以前相同的内容。