Java是值传递还是引用传递的分析

         先看一下代码,猜猜下面的程序会输出什么?

package com.wjy.test;


public class Batman extends Father{

	private int index;
	public Batman(int index){
		this.index=index;
	}
   private static void change(StringBuffer d)
   {
	  d=new StringBuffer("nihao");
   }
   private static void change(Batman d)
   {
	  d=new Batman(111);
   }
   public static void main(String args[]){
//	   StringBuffer stringBuffer=new StringBuffer("hello");
//	   change(stringBuffer);
	   Batman batman=new Batman(222);
	   change(batman);
	   
	   System.out.println(batman.index);
   }
   }

 

结果输出:

222

 

1.问题分析:既然调用了change(Batman d)就将对象batman传递进了change函数中,关键就在这里:

                change(Batman d)的形参d执行了这样的操作:将实参batman传递给形参d。虽然d=new Batman(111);实际上在change函数退出的时候,d这个对象已经销毁了。所以输出结果为:222;

  

2.假设在change(Batman d)里面将d=new Batman(111);改为d.index=111;

这样子输出结果:111。

分析:将batman赋值给了d。这样子d也指向了batman。通过d可以访问到batman的数据。而上一个例子d被重新定向指向了一个新的Batman的对象Batman(111)。所以根据d.index=111;可以修改batman的index的域的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值