您的位置:首页 > 编程语言 > Java开发

java 函数传引用参数的理解

2014-04-02 20:00 387 查看
// 记住:不管引用怎么变,只要不调用该引用的方法,该引用所指的对象的任何属性都不会变。

public class Book{
private String name;
public Book(String str){name=str;}
public Book(){}
public Book(Book b1){name=b1.getName();}

public String getName(){return name;}
public void setName(String str){name=str;}

public static void swap1(Book b1, Book b2)
{
Book tmp=new Book();
tmp=b1;
b1.setName(b2.getName());
b2.setName(tmp.getName());
}

public static void swap2(Book b1, Book b2)
{
Book tmp=new Book(b1);
//tmp=b1;
b1.setName(b2.getName());
b2.setName(tmp.getName());
}
public static void main(String[] args)
{
//swap
Book b1=new Book("b1");
Book b2=new Book("b2");
//swap(b1,b2);
swap2(b1,b2);
System.out.println(b1.getName());
System.out.println(b2.getName());
System.out.println("Swap complished!");
swap1(b1,b2);
System.out.println(b1.getName());
System.out.println(b2.getName());
}
}


程序执行的结果:

b2

b1

Swap complished!

b1

b1

在利用swap2函数时,我们完成了交换,为什么使用swap1没有完成交换那。

对于swap1()

public static void swap(Book b1, Book b2)

{ //因为参数是对象,所以传递时传递的是引用:引时b1,b2的引用地址和主main()函数中的是一样的。

Book tmp=new Book(); // 此时我们的tmp是别外一个对象,有自己的引用地址。

tmp=b1;
// 此时,tmp引用的值变成了b1引用的地址。所以在下面执行中,对tmp的改变和对b1的改变是一样
的。因为两者指向对像是同一个地址。

b1.setName(b2.getName());

b2.setName(tmp.getName()); //此时tmp和b1是一致的,所以我们完不成交换。即我们的创建的临时变量并没有起到作用。

所以,要想创建的临时变量起作用,那么我在创建临时变量时就把要交换的数据给初始化上去。所
以利用swap2()就可以完成了。

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: