java 函数传引用参数的理解
2014-04-02 20:00
387 查看
// 记住:不管引用怎么变,只要不调用该引用的方法,该引用所指的对象的任何属性都不会变。
程序执行的结果:
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()就可以完成了。
}
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()就可以完成了。
}
相关文章推荐
- Java:理解Java中函数参数传递的【按值传递】和【按引用传递】
- JAVA中函数调用参数传递的理解(值传递和引用传递的理解)
- 2017033000C++函数参数和返回值三种传递方式:值传递、指针传递和引用传递(着重理解)
- 面试之路(18)-java的函数参数传递类型之值传递还是引用传递
- Java中函数参数的传递是值传递还是引用传递
- Java函数传递参数:值传递还是引用传递
- Java 函数的参数引用,通过传入参数带回函数运行结果
- Java中函数参数的传递是值传递还是引用传递
- 深入理解python中函数传递参数是值传递还是引用传递
- Java参数传递造成参数值改变的情况--值传递和引用传递的初步理解
- C++函数参数和返回值三种传递方式:值传递、指针传递和引用传递(着重理解)
- C、C++、java中函数的参数:传值 or 传引用
- 函数参数与函数调用(彻底理解值传递与引用传递)
- Java函数参数的值传递和引用传递
- java程序设计--孙鑫java无难事Lesson5《java常用包、数据类型与引用类型、函数参数传递、克隆机制》
- 关于js 函数传递引用参数理解
- 面试之路(18)-java的函数参数传递类型之值传递还是引用传递
- Java中方法参数传递----传值与传引用的理解
- 面试之路(18)-java的函数参数传递类型之值传递还是引用传递
- 对比C++理解Java函数传参数的方式