关闭

论Java 参数传递

309人阅读 评论(0) 收藏 举报
分类:
public class Test {
	public void modify(Dog dog ,int l) {
		//函数内修改了传入的参数
		dog.setLeg(l);
		l = 10;
		System.out.println("During:dog'leg"+dog.getLeg()+"  l:"+l);
	}
	public static void main(String[] args) {
		Dog d = new Dog(4);
		int l = 2;
		System.out.println("Before:dog'leg"+d.getLeg()+"  l:"+l);
		new Test().modify(d, l);
		System.out.println("After:" + d.getLeg()+"  l:"+l);//After:2
//              运行结果
//		Before:dog'leg4  l:2
//		During:dog'leg2  l:10
//		After:2  l:2
	}
}


不纠结于传值还是传引用(实际是值传递)

java在函数调用时,参数传递时先将参数拷贝一份然后传给函数,基本类型和引用类型的区别在于,引用类型保存的是某一对象在堆空间的地址,而基本数据类型保存的是内存本身,传入引用类型Dog d(一块地址XXXXXXXX)后,虽说传入是d的copy(同样是XXXXXXXX),但这块copy和我原来的对象指向的是同一块堆空间啊,函数通过这个copy找到我在堆空间的东西后一通乱改,改完后我d指向的位置(XXXXXXXX)虽然没变,但是位置里面的东西改变了阿.

基本数据类型传入的也是copy但是,在java中基本数据类型保存的内存本身,copy也是一块内存,这块内存中保存的是具体的数据,而不是引用类型的一块地址.这块copy传入后会被修改,但是修改后却与我原来的数据无关.所以基本类型传入后数据不会变.

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8887次
    • 积分:215
    • 等级:
    • 排名:千里之外
    • 原创:11篇
    • 转载:9篇
    • 译文:0篇
    • 评论:0条
    文章分类