Topic: Java中的参数传递问题

  Print this page

1.Java中的参数传递问题 Copy to clipboard
Posted by: fuliang2008
Posted on: 2005-07-31 17:21

在有的书上说java参数在传递参数的时候如果不是基本类型则采用传递reference
而有得书上则说都采用传值方式,小弟作了一个程序作了如下测试,结果却让人疑惑:

public class ByValueOrByReference
{
  public static void main(String []args)
  {
    Person p1=new Person("Zhangsan");
    Person p2=new Person("Lisi");
    swap(p1,p2);
    System.out.println("p1 name: "+p1.getName()+"\np2 nam e: "+p2.getName());//p1 name: Zhangsan
//p2 name: Lisi
    //象是by value;
    changeName(p1,p2);
    System.out.println("p1 name: "+p1.getName()+"\np2 name: "+p2.getName());//p1 name: Lisi
//p2 name: Zhangsan
//象是by reference;
  }
  public static void swap(Person p1,Person p2)
  {
    Person temp=p1;
    p1=p2;
    p2=temp;
  }
  public static void changeName(Person p1,Person p2)
  {
    p1.setName("Lisi");
    p2.setName("Zhangsan");
  }
}
class Person
{
private String name;
public Person(String name)
{
  this.name=name;
}
public String getName()
{
  return name;
}
public void setName(String name)
{
  this.name=name;
}

}

2.Re:Java中的参数传递问题 [Re: fuliang2008] Copy to clipboard
Posted by: Reeves1016
Posted on: 2005-07-31 22:59

具体过程是这样的:
刚开始:p1->"zhangsan" p2->"lisi"
进入swap后:p1->p1->"zhangsan",p2->p2->"lisi"
swap交换后:p2->p1->"zhangsan",p1->p2->"lisi"//关键在这里,交换的只是函数内的那个p1,p2,而main中的p1,p2其实并没有改变
退出swap后:p1->"zhangsan" p2->"lisi"
至于changename应该很好理解的

3.Re:Java中的参数传递问题 [Re: fuliang2008] Copy to clipboard
Posted by: xxxnn
Posted on: 2005-08-01 08:54

参数是传值的。
对象传递也是值(对象的引用)..因为引用是指向对象.所以会改变对象的属性

4.Re:Java中的参数传递问题 [Re: xxxnn] Copy to clipboard
Posted by: ranchgirl
Posted on: 2005-08-17 04:33

xxxnn wrote:
参数是传值的。
对象传递也是值(对象的引用)..因为引用是指向对象.所以会改变对象的属性


Correct!!!
Thanks!

5.Re:Java中的参数传递问题 [Re: fuliang2008] Copy to clipboard
Posted by: nevercompromise
Posted on: 2005-08-25 18:15

顶一下


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923