疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java参数传递的方式


 

  在参数传递的过程中,Java采用的只有一种方式,那就是值传递。除了基本类型的参数外,传递的都是对象的引用。

  package constructor;

  public class ArgumentTest {

  private String str;

  public ArgumentTest(String str) {

  this.str = str;

  }

  public String getStr() {

  return str;

  }

  public void setStr(String str) {

  this.str = str;

  }

  public String toString() {

  return "ArgumentTest:" + str;

  }

  public static void swap(ArgumentTest arg1, ArgumentTest arg2) {

  ArgumentTest temp = arg1;

  arg1 = arg2;

  arg2 = temp;

  System.out.println(arg1.toString());

  System.out.println(arg2.toString());

  }

  public static void main(String[] args) {

  ArgumentTest a = new ArgumentTest("aaaaa");

  ArgumentTest a1 = a;

  ArgumentTest b = new ArgumentTest("bbbbb");

  System.out.println("###########");

  System.out.println(a.toString());

  System.out.println(a1.toString());

  System.out.println(b.toString());

  System.out.println("###########");

  swap(a, b);

  System.out.println("###########");

  System.out.println("After: ");

  System.out.println(a.toString());

  System.out.println(b.toString());

  }

  }

  运行结果为:

  ###########

  ArgumentTest:aaaaa

  ArgumentTest:aaaaa

  ArgumentTest:bbbbb

  ###########

  ArgumentTest:bbbbb

  ArgumentTest:aaaaa

  ###########

  After:

  ArgumentTest:aaaaa

  ArgumentTest:bbbbb

  从结果可以看出,在swap()方法中,两个参数确实发生了交换。但是最终的结果却并没有因此改变。事实上,传入swap()的两个参数只是引用a和b的副本,即arg1和a指向堆上的同一个对象,arg2和b同时指向堆中的另一个对象。调用swap()函数,令arg1和arg2的指向发生了互换。但是在方法调用结束以后,arg1和arg2就会被自动销毁。而a和b的指向却没有任何变化。