java两种参数传递方式

您所在的位置:网站首页 调用函数的方式有哪几种 java两种参数传递方式

java两种参数传递方式

2024-07-11 12:18| 来源: 网络整理| 查看: 265

 

目录

一、按值传递

二、按址传递

总结: 

java的参数传递方式有两种:

按值传递按址传递(引用传递) 一、按值传递

方法操作的是参数变量(也就是原型变量的一个值的拷贝),改变的也只是原型变量的一个拷贝而已,而非变量本身,所以变量原型并不会随之改变。

适用范围:8种基本数据类型、String对象

举例:

package addr; public class test1 { public static void main(String[] args) { test1 test1 = new test1(); test1.A(); } private void A() { String originalStr = "original"; Change(originalStr); System.out.println("调用方法后的字符串 :" + originalStr); //拷贝,不变 } public void Change(String string) { string = string + " is changed!"; System.out.println("改变后的字符串: " + string); //方法内部,变 } }

运行结果:

结果解释:

方法调用的是String类型的对象,按值传递,即Change调用的是originalStr的一个拷贝,故在方法内部此拷贝值改变了,而不影响原始的originalStr值。

再举个栗子:

package addr; public class test2{ public static int t1(int n){ n = 10; return n; } public static String t2(String s){ s = "123"; return s; } public static void main(String[] args){ //对于按值传递的参数,如果需要在方法调用以后修改参数的值,可以利用返回值来实现 int m = 5; m = t1(m);//重新赋值,变 System.out.println(m); String s1 = "abc"; s1 = t2(s1);//重新赋值,变 System.out.println(s1); } }

运行结果:

由上段代码可知:

处理按值传递的参数经过方法调用后值不变的问题,可以通过返回值来改变值。

二、按址传递

方法操作参数变量时是拷贝了变量的引用,而后通过引用找到变量(在这里是对象)的真正地址,并对其进行操作。因此方法改变参数变量的同时变量原型也会随之改变。

适用范围:数组、除String以外的其他所有类型的对象。

举个栗子: 

package zl; public class test3{ public static void t1(int n){ n = 10; } public static void t2(String s){ s = "123"; } public static void t3(int[] array){ array[0] = 2; } public static void main(String[] args){ int m = 5; t1(m);//整型不变 System.out.println(m); String s1 = "abc"; t2(s1);//string不变 System.out.println(s1); int[] arr = {1,2,3,4}; t3(arr);//数组变 System.out.println(arr[0]); } }

运行结果:

再举个栗子: 

package zl; public class test4{ public static int[] t3(int[] array){ int[] newArray = new int[array.length];//创建新的数组 System.arraycopy(array,0,newArray,0,array.length);//数据拷贝 newArray[0] = 2;//newArray:{2,2,3,4} return newArray; } public static void main(String[] args){ int[] arr = {1,2,3,4}; for(int i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3