泉州市网站制作企业,做前端开发需要学什么,永久免费白嫖云服务器,怎么wordpress用的什么主题本文实例讲述了Java方法的参数传递机制。分享给大家供大家参考#xff0c;具体如下#xff1a;参数传递机制对于程序设计语言来说#xff0c;一般方法(函数)的参数传递有两种#xff1a;按值传递和按引用传递。按值传递意味着当将一个参数传递给一个方法时#xff0c;方法…本文实例讲述了Java方法的参数传递机制。分享给大家供大家参考具体如下参数传递机制对于程序设计语言来说一般方法(函数)的参数传递有两种按值传递和按引用传递。按值传递意味着当将一个参数传递给一个方法时方法接收的是原始值的一个副本。因此如果方法修改了该参数仅改变副本而原始值保持不变。按引用传递意味着当将一个参数传递给一个方法时方法接收的是原始值的内存地址而不是值的副本。因此如果方法修改了该参数调用代码中的原始值也随之改变。需要注意的是方法可以修改按引用传递的参数对应的变量值但不可以修改按值传递的参数对应的变量值这是两者的最大区别。Java中的参数传递Java中的参数传递机制只有一种就是值传递。在Java中并没有C的引用传递这种参数传递机制它所有的参数传递都遵循值传递的机制。Java中对于对象(数组类接口)的传递似乎有点像引用传递可以改变对象中某个属性的值。但是不要被这个假象所蒙蔽实际上这个传入方法的值是对象引用的拷贝即传递的是引用的地址值所以还是按值传递。基本类型的参数传递在方法调用时传递的参数是按值的拷贝传递public class Test {public static void main(String[] args) {Test t new Test();int a 5;t.method(a); // 传递后method方法对变量值的改变不影响这里的aSystem.out.println(method调用完后的a: a);}private void method(int a){System.out.println(method中重新赋值之前的a: a);a 10;System.out.println(method中重新赋值之后的a: a);}}执行结果如下method中重新赋值之前的a: 5method中重新赋值之后的a: 10method调用完后的a: 5由此可知按值传递重要特点传递的是值的拷贝也就是说传递后就互不相关了。下面看一下内存分析引用类型的参数传递在方法调用时传递的参数按引用进行传递其实传递的引用的地址也就是变量所对应的内存空间的地址。public class Test {public static void main(String[] args) {Person person new Person();person.age 18;// 把main方法中的变量person所引用的内存空间地址按引用传递给method方法中的person变量// 请注意这两个person变量是完全不同的不要被名称相同所蒙蔽method(person);System.out.println(调用method方法之后 person.age);}public static void method(Person person){person.age 20;System.out.println(method方法内第一次修改 person.age);person new Person(); // 新创建一个对象person.age 25;System.out.println(method方法内第二次修改 person.age);}}class Person {public int age;}执行结果如下method方法内第一次修改20method方法内第二次修改25调用method方法之后20这里传递的是值的引用也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。下面我们接着看一个例子public class Test {public static void main(String[] args) {int[] a {5, 10};method(a);System.out.println(调用完method方法之后 a[0]);}public static void method(int[] a){System.out.println(method内修改a[0]之前 a[0]);a[0] 50;System.out.println(method内修改a[0]之后 a[0]);}}执行结果如下method内修改a[0]之前5method内修改a[0]之后50调用完method方法之后50根据结果可知调用method方法时实际传递的是引用的地址值。传递String类型的参数由于String类是final修饰的不可变它会在内存中在开辟一块新空间。public class Test {public static void main(String[] args) {String str1 new String(test1);String str2 test2;method(str1, str2);System.out.println(调用method传参str1之后 str1 , str2);}public static void method(String str1, String str2){System.out.println(method内修改str之前 str1 , str2);str1 new1;str2 new2;System.out.println(method内修改str之后 str1 , str2);}}执行结果如下method内修改str之前test1, test2method内修改str之后new1, new2调用method传参str1之后test1, test2总结1)基本数据类型传递的是值的复制对一个参数的修改不会影响另一个参数2)引用类型传引用形参和实参指向同一个内存地址(同一个对象)所以对参数的修改会影响到实际的对象3)String、Integer、Double等immutable的类型特殊处理可以理解为传值最后的操作不会修改实参对象(与基本数据类型一致)。希望本文所述对大家java程序设计有所帮助。