Java深入学习18:Java方法的参数传递机制
一、两个概念
形式参数:是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数,简称“形参”。
实际参数:在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”,简称“实参”。
二、值传递和引用传递
参数传递机制有两种:值传递和引用传递。
- 值传递:是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
- 引用传递:是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
两者区别
Java中传递引用数据类型的时候也是值传递。因为复制的是参数的引用(地址值),并不是引用指向的存在于堆内存中的实际对象。
三、代码示例
public class MethodParamTest { public static void main(String[] args) { int i = 1; String str = "hello"; Integer num = 1; int[] arr = {1,2,3,4,5}; Student stu = new Student(21); change(i,str,num,arr,stu); System.out.println("i = " + i);//i = 1 System.out.println("str = " + str );//str = hello System.out.println("num = " + num );//num = 1 System.out.println("arr = " + Arrays.toString(arr));//arr = [0, 2, 3, 4, 5] System.out.println("stu.getAge() = " + stu.getAge() );//stu.getAge() = 22 } static void change(int j, String s, Integer in, int[] intArr, Student student){ j = 2; s += "tyj"; in = 2; intArr[0] = 0; student.setAge(22); } } class Student{ private int age; public Student(int age) { this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
四、总结
1)基本数据类型传递的是值的复制,对一个参数的修改不会影响另一个参数;
2)引用类型传引用,形参和实参指向同一个内存地址(同一个对象),所以对参数的修改会影响到实际的对象;
3)String、Integer、Double等immutable的类型特殊处理,可以理解为传值,最后的操作不会修改实参对象(与基本数据类型一致)。
END