方法的传参机制

本文详细介绍了Java中参数传递的基本数据类型和引用数据类型的机制。基本类型在方法调用时传递值的副本,因此方法内的修改不会影响到外部变量。而引用类型传递的是对象的地址,因此方法内对对象的修改会影响到原始对象。通过示例代码解释了这一概念,并在main()方法中展示了调用swap()方法后,基本类型参数和引用类型参数的不同行为。
摘要由CSDN通过智能技术生成

学习方法的传参机制之前,先来了解实参和形参以及基本数据类型和引用类型:

形参:顾名思义:就是形式参数,用于定义方法的时候使用的参数,是用来接收调用者传递的参数的。形参只有在方法被调用的时候,虚拟机才会分配内存单元,在方法调用结束之后便会释放所分配的内存单元。因此,形参只在方法内部有效,所以针对引用对象的改动也无法影响到方法外
实参:顾名思义:就是实际参数,用于调用时传递给方法的参数。实参在传递给别的方法之前是要被预先赋值的。

通俗的说,形参就是函数定义时参数表的各个变量,实参就是调用函数时给函数的变量(写在函数名后的圆括号里)
比如函数 int fun(int a,int c){some operation;}
a和c都是形参。
当我调用函数fun时,例如:
int n,i=1,j=2;
n=fun(i,j);
调用fun(i,j)形式中的i,j就是实参。

基本数据类型:java中一共分为8种基本数据类型:byte、short、int、long、float、double、char、boolean
引用类型:引用类型指向一个对象,不是原始值,指向对象的变量是引用变量。
在java里面除去基本数据类型的其他类型都是引用类型,自己定义的class类都是引用类型,可以像基本类型一样使用。引用类型是一种对象类型,它的值是指向内存空间的引用,就是地址。

内存分配
基本数据类型的变量是存储在栈内存中,而引用类型变量存储在栈内存中,保存的是实际对象在堆内存中的地址,实际对象中保存这内容。

基本数据类型的传参机制:

下列实例
swap方法:

class AA {
public void swap(int a,int b){
System.out.println("\na 和 b 交换前的值\na=" + a + "\tb=" + b);//a=10 b=20
//完成了 a 和 b 的交换
int tmp = a;
a = b;
b = tmp;
System.out.println("\na 和 b 交换后的值\na=" + a + "\tb=" + b);//a=20 b=10
}
}

main()方法:

public static void main(String[] args) {
int a = 10;
int b = 20;
//创建 AA 对象 名字 obj
AA obj = new AA();
obj.swap(a, b); //调用 swap
System.out.println("main 方法 a=" + a + " b=" + b);//a=10 b=20
}

main()中调用了swap()方法,即产生了swap栈,swap栈中的a b数值交换了,故在swap方法输出a=20,b=10。
当swap()运行结束,swap()栈出,回到main()栈,输出的a,b为main()栈中的,main()栈中a,b值并没有交换,输出a=10,b=20
总结:基本数据类型转递的是值(值拷贝),在值传递调用过程中,只能把实参传递给形参,而不能把形参的值反向作用到实参上。在函数调用过程中,形参的值发生改变,而实参的值不会发生改变。

引用数据类型的传参机制

引用类型传递的是地址(传递也是值,但是值为地址),可以通过形参影响实参!
**引用类型变量存储在栈内存中,保存的是实际对象在堆内存中的地址,对引用类型的修改,即对堆中对应地址的内容修改。**故可以通过形参影响实参。
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值