通过实例了解Java参数中的值传递和引用传递
程序员文章站
2022-07-10 18:51:06
深入了解值传递 和 引用传递值传递引用传递例题值传递对于基本数据类型,参数通过值传递。(把实参的值复制一份再传给形参,实参的值不会发生改变)引用传递对于引用类型,参数通过引用(对象的引用)传递。(把实参引用中地址值复制一份再传给形参,这时实参和形参地址所指向的是堆区内同一块内存空间)例题import java.util.Arrays;public class Dome {public static void change(int a,String s,Integer i,in...
值传递
- 对于基本数据类型,参数通过值传递。(把实参的值复制一份再传给形参,实参的值不会发生改变)
引用传递
- 对于引用类型,参数通过引用(对象的引用)传递。(把实参引用中地址值复制一份再传给形参,这时实参和形参地址所指向的是堆区内同一块内存空间)
例题
import java.util.Arrays;
public class Dome {
public static void change(int a,String s,Integer i,int[] arr,MyData m) {
a += 1;
s += "world";
i += 1;
arr[0] += 1;
m.data += 1;
System.out.println("a="+a);
System.out.println("s="+s);
System.out.println("i="+i);
System.out.println("arr="+Arrays.toString(arr));
System.out.println("m.data="+m.data);
}
public static void main(String[] args) {
int a = 1;
String s = "hello";
Integer i = 1;
int[] arr = {1,2,3,4};
MyData m = new MyData();
change(a, s, i, arr, m);
}
}
class MyData{
int data = 10;
}
执行结果:
a=2
s=helloworld
i=2
arr=[2, 2, 3, 4]
my.data=11
值得注意的是:
-
String 、包装类都属于对象类型,所以必然是引用传递,但是由于String类和包装类都没有提供value对应的setter方法,我们无法改变其内容,所以导致我们看起来好像是值传递。
-
包装类都是不可变类(不只是String),实际可变是因为改变后不再是原来的对象,而是新建的一个符合预期的对象。
感谢您的观看,转载、引用请注明出处!