前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >成员方法传参机制(1)

成员方法传参机制(1)

作者头像
zxmttkx
发布2022-12-02 12:01:12
3790
发布2022-12-02 12:01:12
举报
文章被收录于专栏:java基础学习java基础学习

基本数据类型传参机制

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

代码语言:javascript
复制
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表示输出语句)

输出结果:

引用数据类型传参机制

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

代码语言:javascript
复制
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。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本数据类型传参机制
  • 引用数据类型传参机制
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档