成员方法传参机制

简介: 成员方法传参机制详解

前言

方法传参机制非常重要,一定要搞的明明白白。

基本数据类型传参机制

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

publicclassMethodParameter01 { 
publicstaticvoidmain(String[] args) {
inta=10;
intb=20;
//创建AA对象 名字 objAAobj=newAA();
obj.swap(a, b); //调用swapSystem.out.println("main方法 a="+a+" b="+b);//a=10 b=20    }
}
classAA {
publicvoidswap(inta,intb){
System.out.println("\na和b交换前的值\na="+a+"\tb="+b);//a=10 b=20//完成了 a 和 b的交换inttmp=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表示输出语句)

引用数据类型传参机制

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

publicclassMethodParameter02 {
//编写一个main方法publicstaticvoidmain(String[] args) {
Bb=newB();
int[] arr= {1, 2, 3};
b.test100(arr);//调用方法System.out.println(" main的 arr数组 ");
//遍历数组for(inti=0; i<arr.length; i++) {
System.out.print(arr[i] +"\t");
         }
System.out.println();
    }
}
classB {
//B类中编写一个方法test100,//可以接收一个数组,在方法中修改该数组,看看原来的数组是否变化publicvoidtest100(int[] arr) {
arr[0] =200;//修改元素//遍历数组System.out.println(" test100的 arr数组 ");
for(inti=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。

相关文章
|
7月前
|
Java 编译器
重载和重写的区别是什么?
重载和重写的区别是什么?
用原型链的方式写一个类和子类
用原型链的方式写一个类和子类
37 0
|
1月前
重载和重写的区别
重载发生在同一个类中,方法名相同、参数列表、返回类型、权限修饰符可以不同 重写发生在子类中,方法名相、参数列表、返回类型都相同,权限修饰符要大于父类方法,声明异常范围要小于父类方法,但是final和private修饰的方法不可重写
29 1
|
1月前
|
JavaScript 前端开发 开发者
|
6月前
|
Java
重载与重写的区别
重载与重写的区别
53 5
|
6月前
|
Java
重载和重写区别
重载和重写区别
39 2
重载和重写有什么区别?
重载和重写有什么区别?
69 0
|
Java
Java方法的重载、可变个数形参、方法参数的值传递机制
Java方法的重载、可变个数形参、方法参数的值传递机制
99 0
|
Java 编译器
java方法的重载要求与作用,重载与重写的区别
java方法的重载要求与作用,重载与重写的区别
277 0
|
Java 编译器
重载与重写有什么区别?
重载与重写有什么区别?
下一篇
DataWorks