Java值传递和地址传递和String类型传递
程序员文章站
2022-06-28 17:10:05
基本数据类型是值传递。基本数据类型(byte int long short boolean char double float)引用数据类型是地址传递。引用数据类型(数组 类 接口)值传递传递值,在函数中形参发生的变化不影响实参。就是把实参的值传递给形参,在形参所在的函数中对此值做了修改的话对实参是没有影响的。值传递是基本类型传递,他的存储过程数据传递都是在栈内存中。举个例子:public static void main(String[] args) {int a=5;in...
基本数据类型是值传递。
基本数据类型(byte int long short boolean char double float)
引用数据类型是地址传递。
引用数据类型(数组 类 接口)
值传递
传递值,在函数中形参发生的变化不影响实参。就是把实参的值传递给形参,在形参所在的函数中对此值做了修改的话对实参是没有影响的。
值传递是基本类型传递,他的存储过程数据传递都是在栈内存中。
举个例子:
public static void main(String[] args) { int a=5; int b=6; test(a,b); System.out.println(a+",test1"); System.out.println(b+",test2"); } public static void test(int a,int b) { a=a+8; b=a; } //输出 5,test1 6,test2
a和b并没有被test函数影响,形参不会影响到实参。所以我们说基本数据类型是值传递。
过程图:
地址传递
传递地址,在函数中形参发生的变化影响实参。就是在调用函数时将实际参数的地址直接传递到函数中(的形参),那么在函数中对参数所进行的修改,将影响到实际参数。
public static void main(String[] args) { int[] arr1= {1,2,3}; int[] arr2= {4,5,6}; init1(arr1, arr2); System.out.println("3"+arr1); System.out.println("4"+arr2); } public static void init1(int[] a,int[] b) { b[2]=2; a=b; }
过程图:
我们可以从上面图片中看出arr2数组从{4,5,6}变成了{4,5,2},所以我们说地址传递形参的改变是会影响到实参的。
String类型传递
String类型比较特殊,因为String类型是不可变的,如果形参经过操作修改的话,常量池中会开辟一个新的内存空间来存储修改后的数据(直接使用双引号声明出来的String对象会直接存储在常量池中)。形参的改变对实参也没有影响。结果和值传递一样,但是值传递不会开辟新的内存空间。
public static void main(String[] args) { String n="a"; init(n); } public static void init(String m) { System.out.println("改变前"+m); m="aaa"; System.out.println("改变后"+m); } //输出 改变前a
改变后aaa
代码可以看出结果和值传递是一样的。
本文地址:https://blog.csdn.net/weixin_44806070/article/details/107882525