成员方法传参机制

基本数据类型:

看一个案例 MethodParameter01.java

首先创建AA类,在AA类中定义一个swap方法有两个形参,,在方法中将a和b交换。

在main方法,定义一个变量a和变量b,分别赋值10,20.

在创建AA对象obj,调用swap方法完成变量a和变量b互换,输出后a=20,b=10;

但是直接打印输出变量a和变量b还是a=10,b=20

例:

public class MethodParameter01 {
    //编写一个 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
    }
}

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
    }
}

结果:

标题

 基本数据类型是存放在JVM中的栈空间里,传递的是值(值拷贝),调用方法会在栈空间里新开辟一个独立的空间,main方法中的值会拷贝给这个空间,方法中的操作都是在这个独立的空间完成的,方法结束后这个空间会随着方法的结束而消亡,方法中做任何的操作,main方法中的变量的值都不会发生改变

引用数据类型的传参机制

看一个案例 MethodParameter02.java

首先定义一个AA类,在AA类中定义一个方法f1,形参为一个int型数组,

在方法中将200赋值给这个数组的第一位

在mian方法中定义一个测试数组array,数组中分别有10,20,30,40这四个值,

调用f1方法后,再次遍历array数组变成了:200,20,30,40

public class MethodParameter02 {
    //编写一个 main 方法
    public static void main(String[] args) {
        //定义一个测试数组array
        int[] array = {10,20,30,40};
        //遍历输出调用方法前的值
        System.out.println("调用方法前");
        for (int i : array) {
            System.out.print(i+" ");
        }
        //创建AA类对象aa
        AA aa = new AA();
        //aa调用f1方法
        aa.f1(array);
        // 遍历输出调用方法后的值
        System.out.print("调用方法后");
        for (int i : array) {
            System.out.println(i+" ");
        }
    }

}
//定义一个AA类
class AA{
    //定义一个方法f1,形参为一个int型数组
    public void f1(int[] arr){
        //将200赋值给这个数组的第一位
        arr[0] = 200;
    }
}

结果:

 引用数据类型是存放在JVM中的堆空间里,传递的是地址(传递也是值,但是值是地址),调用方法时也会开辟一个独立空间,main方法中的地址会拷贝给方法中的形参,这时他们都指向堆空间,方法中的形参进行修改,main方法中实参也会改变

结论:

基本数据类型,传递的是值(值拷贝),形参的任何改变不影响实参!

引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值