欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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函数影响,形参不会影响到实参。所以我们说基本数据类型是值传递。
过程图:
Java值传递和地址传递和String类型传递

地址传递

传递地址,在函数中形参发生的变化影响实参。就是在调用函数时将实际参数的地址直接传递到函数中(的形参),那么在函数中对参数所进行的修改,将影响到实际参数。

 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; } 

过程图:
Java值传递和地址传递和String类型传递
我们可以从上面图片中看出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

相关标签: Java值传递