java当中的参数传递

 

在java中:

基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的

在Java中对象作为参数传递时,传递的是引用的拷贝,既不是引用本身,更不是对象。

 

总结: 

1:对于值类型的参数来说,传递的是值的拷贝. 

2:对于引用类型的参数来说,传递的是引用本身的拷贝. 

所以关键要看你如何理解传值中的这个“值”了。

 

 

实例:

 

public class ReferTest {
	public static void call(Test t) {  
		     Test t2 = new Test(); 
		     t = t2 ;
		     
		     t2.setName("cba");
		     t.setName("abc"); 
		     
		     System.out.println(t.getName());
		     System.out.println(t2.getName());
	}  
	
	public static void test(int i){
		i+=1;
		System.out.println(i);
	}
	
	public static void main(String[] arg){
		/**引用传递测试*/
		Test obj = new Test();
		call (obj);
		System.out.println("obj"+obj.getName());
		
		/**基本类型传递*/
		int z = 0;
		test(z);
		System.out.println(z);
	}  
}

class Test{
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

 

 打印结果:

 

 

abc
abc
objnull
1
0

 

 

分析:

1、当调用call (obj);方法时,打印:abc,abc是可以理解的,不好理解的是System.out.println("obj"+obj.getName());

打印出来的objnull,obj明明已经作为参数传递进去了,为什么会打印一个null呢?

对于引用类型的参数来说,传递的是引用本身的拷贝.

也就是说传递给call方法的参数是Test类的一个实例的引用的拷贝,这个拷贝刚进到call方法当中时,确实也指向Test的一个实例对象:Test obj = new Test();

但是下面一句代码:t = t2 ;将这个指向改变了,它已经不再指向obj这个对象,而是Test t2 = new Test(); 这个对象。

这样就没有了针对对象Test obj = new Test();的任何操作,所以当打印System.out.println("obj"+obj.getName());

结果为objnull

 

2、从1,0的打印结果来看,在结合上面的理论:

基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的

这样就不用什么解释,已经解释的很好了

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值