成员方法传参机制

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

前言

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

基本数据类型传参机制

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

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。

相关文章
|
4月前
|
Java
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
本文深入探讨了Java中方法参数的传递机制,包括值传递和引用传递的区别,以及String类对象的不可变性。通过详细讲解和示例代码,帮助读者理解参数传递的内部原理,并掌握在实际编程中正确处理参数传递的方法。关键词:Java, 方法参数传递, 值传递, 引用传递, String不可变性。
91 1
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
|
3月前
|
JavaScript 前端开发 开发者
|
8月前
|
Java
java反射-动态调用方法(无参无返回值、有参无返回值、有参有返回值)
java反射-动态调用方法(无参无返回值、有参无返回值、有参有返回值)
102 0
|
Java
JAVA参数传值机制中值传递和引用传递
JAVA参数传值机制中值传递和引用传递
116 0
C++ 类,this指针,封装
C++ 类,this指针,封装
|
Java
Java方法的重载、可变个数形参、方法参数的值传递机制
Java方法的重载、可变个数形参、方法参数的值传递机制
120 0
|
存储 编译器 数据处理
【构造函数】解析构造函数的作用
构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。
136 0
|
编译器 C++
【一、构造函数与析构函数】深度解析C++类的构造函数与析构函数调用机制
【一、构造函数与析构函数】深度解析C++类的构造函数与析构函数调用机制
605 0
|
Java 编译器
java方法的重载要求与作用,重载与重写的区别
java方法的重载要求与作用,重载与重写的区别
291 0