22、方法的参数传递

方法的参数传递

方法,必须有其所在类或对象调用才有意义。若方法含有参数:

形参:方法声明时的参数

实参:方法调用时实际传给形参的参数值

Java里方法的参数传递方式只有一种:值传递:即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响

一、JVM的内存模型

1)引用对象

Person p = new Person();

new 一个 Person类对象 p 在 JVM内存中的表现:

1、new Person() 对象在堆[heap]中,假设其地址 BE95000;【真正的对象】

2、栈中存的是 p【new Person() 对象】在堆[heap]中的地址,即BE95000;该地址在栈中的地址假设为AG84300【对象地址】

2)基础数据类型 

int i = 1;

在栈中,i 的地址假设为 AG84100;值为 1;

总结:基础数据类型,值是保存在栈中;引用对象,值保存在堆中,栈中存的对象是堆中的地址

二、方法的参数传递之基础数据类型

public class Test {
	public static void swap(int i){
		i = 6;
		System.out.println("swap方法中的参数i的值:" + i);
	}
	
	public static void main(String[] args) {
		int a = 0;
		swap(a);
		System.out.println("main方法中的a的值:" + a);
	}
}

输出:

1、先执行 int a = 0 ;在栈中开辟了一块内存,地址假设为AD8500,存的值是0;

2、调用 swap() 方法,执行 int i  部分,在栈中开辟了一块内存,地址假设为AD8600,值就是从 a 哪里复制过来的值,就是0;执行swap的方法体里面的代码 -- i = 6,把 i 在栈中的值改为6,最终 i 在栈中的值就是6 ;栈内存如上图所示

总结:基本数据类型在参数的传递过程中就是把实参的值复制到形参上

三、方法的参数传递之引用对象

DataSwap.java

public class DataSwap{
    public int a;
}

Test.java

public class Test {
    public static void swap(DataSwap ds1){
        ds1.a = 6;
        System.out.println("在swap方法中,ds1.a的值是:" + ds1.a);
    }
    public static void main(String[] args) {
        DataSwap ds = new DataSwap();
        System.out.println("调用swap方法之前,ds.a的值是:" + ds.a);
        swap(ds);
        System.out.println("调用swap方法之后,ds.a的值是:" + ds.a);
    }

}

输出:ds、ds1 操作的其实是同一个对象

调用过程:

1)DataSwap ds = new DataSwap();-- 将 new DataSwap() 存到了堆内存中,地址BE2500;

2)ds引用对象存到栈中,地址是AD9500,值是 new DataSwap() 对象在堆中的地址BE2500;

3)调用swap方法,将 ds1 引用对象保存到栈中,地址是AD9600,存的值是实参【ds的栈中的值,这个值实际上就是之前 new DataSwap()对象在堆内存中的地址 BE2500】实际上 ds 、ds1 其实都是指向同一个对象,这个对象就是在堆内存中地址是BE2500上保存的对象 

【ds、ds1是引用对象,存的是对象实际在堆中的地址;堆中是对象实际存储的地方】

总结:方法的参数传递

1)如果方法的形参是基本数据类型,那么实参向形参传递参数是就是传递值,把实参的值复制给形参;

2)如果方法的形参是对象,那么实参向形参传递参数时也是将值给形参,这个值是实参在栈内存中的值,即引用对象在堆内存中的地址;

基本数据类型都是保存在栈内存中,引用对象在栈内存中保存的是引用对象的地址,方法的参数传递是传递值(变量在栈内存的值)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值