阅读 59

【JavaSE】成员方法传参机制

成员方法传参机制

1. 基本数据类型的传参机制

在这里插入图片描述

public class MethodParameter01 {     public static void main(String[] args) {         int a = 10;         int b = 20;         AA2 obj = new AA2();         obj.swap(a,b);         System.out.println("main方法 a=" + a + "\tb=" + b);     } } class AA2{     public void swap(int a,int b){         System.out.println("a和b交换前的值:" + "a=" + a + "\tb=" + b);         int tmp = a;         a = b;         b = tmp;         System.out.println("a和b交换后的值:" + "a=" + a + "\tb=" + b);     } } 复制代码

在这里插入图片描述

  • 内存分析法:

堆:一般存放基本数据类型(局部变量) 栈:存放对象(Cat cat,数组,引用数据类型等) 在这里插入图片描述

  • 最后输出的 a,b的值是在main方法中,要找的是main方法中的a和b的值,而主函数中的a,b并没有发生交换,所以是 a = 10,b = 20

  • swap方法中发生交换,但并不影响主方法中的交换,因为mian栈和swap是两个独立的空间,而且a、b都是基本数据类型,不是引用数据类型,所以不会影响到主方法中的a、b的值

2. 引用数据类型的传参机制

  1. 看一个案例 MethodParameter02.java

  • B 类中编写一个方法 test100,可以接收一个数组,在方法中修改该数组,看看原来的数组是否变化?答案:会变化

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();     } } 复制代码

在这里插入图片描述

  • 内存分析法:

  • 只要是调用一个方法就会产生一个新的栈

  • 引用类型传递的是一个地址

在这里插入图片描述

  • B 类中编写一个方法 test200,可以接收一个 Person(age,sal)对象,在方法中修改该对象属性,看看原来的对象是否变化?答案:会变化

public class MethodParameter02 {     //编写一个main方法     public static void main(String[] args) {         //测试         BB b = new BB();         Person p = new Person();         p.name = "xdr630";         p.age = 22;         b.test200(p);         System.out.println("main 的 p.age=" + p.age); //10000     } } class Person{     String name;     int age; } class B {     public void test200(Person p){         person.age = 10000;     } } 复制代码

  1. 结论

引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参 3) 在看一个案例,下面的方法会对原来的对象有影响吗?

```java public class MethodParameter02 {     //编写一个main方法     public static void main(String[] args) {         //测试         BB b = new BB();         Person p = new Person();         p.name = "xdr630";         p.age = 22;         b.test200(p);         System.out.println("main 的 p.age=" + p.age); //10000     } } class Person{     String name;     int age; } class B {     public void test200(Person p){         p = null;     } } 复制代码

在这里插入图片描述

  • 对应示意图

在这里插入图片描述


作者:兮动人
链接:https://juejin.cn/post/7026375170763784223


文章分类
前端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐