成员方法传参机制(1)

基本数据类型传参机制

分析下面的案例,看看结果会输出什么。

public class MethodParameter01 { 
	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
	}
}

流程分析:

1)程序运行到 AA obj = new AA(); 时,会创建一个AA对象,名字为 obj。

2)调用AA对象中的swap方法,将 a = 10,b = 20,传给 swap 方法中的a和b。

3)在方法中,先输出了一遍a和b原本的值,然后进行了交换,此时在方法中a和b的值已经互换了。

4)在互换之后,又输出了一遍a和b的值,此时a = 20,b = 10。

5)方法执行完后,在main方法中又输出了一遍a和b的值,此时就要注意这里的a和b是多少。

6)这里的值a = 10,b = 20。这到底是为什么

        结论:基本数据类型,传递的是值,形参的任何改变不影响实参,所以在swap方法中交换了a和b的值,但不影响a和b在main方法中的值,也可以说,每个方法都在堆中对应一个自己的内存空间,不会互相影响。(注:sout表示输出语句)

输出结果:

 

引用数据类型传参机制

分析引用数据类型的传参案例,看看会输出什么

public class MethodParameter02 {
    //编写一个main方法
    public static void main(String[] args) {
 
         B b = new B();
         int[] arr = {1, 2, 3};
         b.test100(arr);//调用方法
         System.out.println(" main的 arr数组 ");
         //遍历数组
         for(int i = 0; i < arr.length; i++) {
         	System.out.print(arr[i] + "\t");
         }
         System.out.println();
    }
}
 
class B {
    
    //B类中编写一个方法test100,
    //可以接收一个数组,在方法中修改该数组,看看原来的数组是否变化
    public void test100(int[] arr) {
        arr[0] = 200;//修改元素
        //遍历数组
        System.out.println(" test100的 arr数组 ");
        for(int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "\t");
        }
        System.out.println();
    }
}

流程分析:

1)给数组arr赋三个值 1, 2, 3,此时会在堆中新开一个地址来存放,也就是堆中0x0011的空间。

2)然后调用test100方法在方法中将arr数组的第一个地址对应的值改为200,也就是 arr[0] = 200。因为是数组引用传递,所以方法test100也会指向0x0011,而导致0x0011中的值也会进行更改。

3)然后在方法test100中遍历数组进行输出,因为此方法指向的内存空间0x0011的值已经进行了更改,所以会输出 200,2,3。

4)方法test100执行完成后,继续执行main方法,再次遍历输出一次arr数组。这里就要注意了,因为两个方法都指向了同一个数据空间,0x0011中的值已经更改,所以在main方法中输出arr数组的也会是 200,2,3。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值