java 函数传引用参数的理解

// 记住:不管引用怎么变,只要不调用该引用的方法,该引用所指的对象的任何属性都不会变。

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()就可以完成了。
      }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值