java只有值传递没有引用传递

java中的参数传递不管是基本数据类型还是引用 数据类型只有值传递,没有引用传递,也就是说Java中参数传递的是内容,而不是引用。下面看几个例子。

例1:

/*
 1. 基本数据类型的参数传递
 2. */
package ch.demo2;
public class TestDemo1 {
	public static void main(String[] args) {
		int a = 5;
		System.out.println(a);
	    change(a);
	    System.out.println(a);
	}
	public static void change(int a){
		a = 6;
	}
}

其输出结果均为5,在基本类型的参数传递中只是将a的内容传给方法change,并没有将自身传递过去,change方法运行时,重新开辟空间存储6,并在方法运行结束后,弹栈而出,整个过程并没有对main方法的a产生影响,也验证了只是将a的内容 传递给方法change,并没有对a产生任何改变。
例2:

class People {
	String name = "张三";

}
/*
 * 引用数据类型参数传递
 * */
package ch.demo2;
public class TestDemo2 {
	public static void main(String[] args) {
		People p = new People();
		System.out.println(p.name);
		change(p);
		System.out.println(p.name);
	}
	public static void change(People p){
		p.name = "李四";
	}
}

输出结果为张三 李四
可以看出经过change方法后输出的结果发生了变化,我们知道p存储的内容实际时内存地址,这里无论是将p的引用传递过去还是内容(内存地址)传递过去,其结果都是如此,所以这个例子并不能看出引用数据类型的参数传递是值传递还是引用传递,请看例3.
例3:

class People {
	String name = "张三";

}
/*
 * 验证引用数据类型是值传递还是引用传递
 * */
package ch.demo2;
public class TestDemo3 {
	public static void main(String[] args) {
		People p = new People();
		System.out.println(p.name);
		change(p);
		System.out.println(p.name);
	}
	public static void change (People p) {
		People p1 = new People();
		p1.name = "李四";
		p = p1;
	}
}

输出结果为张三 张三,可见经过change方法后,p.name并没有发生改变,如果是引用传递的话,将p本身传递过去,在经过p=p1,p的name值一定会发生改变,故只是将p的存储地址传递过去,对p本身并没有进行任何操作,结果不会发生变化。

经过上面三个例子说明,在java中的参数传递传递只有值传递,没有引用传递,即传递的只是对象存储的内容并不是对象本身。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值