按值传递
public static void main(String[] args) {
int i = 10;
template(i);
System.out.println(i);
}
public static void template(int i) {
i = 20;
}
以上述代码为例,按值传递在方法调用时,传递的参数是按值的拷贝传递,在mian方法中的参数i为实参,在template方法中i为形参,与变量名无关,不要混淆。
在执行main方法时在内存中会创建一个i的内存空间地址,i的值传给template后就互不相关了,因为在template中也同样创建了一个i=20的内存空间地址,两者指向的空间地址不同,在main方法中再输出i仍然是用的i=10的值。
按引用传递
public static void main(String[] args) {
int[] x = {1, 2, 3};
template(x);
System.out.println(x[0]);
}
public static void template(int[] a) {
a[0]=20;
}
按引用传递时实参传递给形参的并不是数据,而是数据的地址,main所指向的内存空间地址。形参和实参将会指向同一内存地址。如何理解呢?template方法他就是个方法,他要对main干点什么,对数组的操作,数组在哪?在main给我传递的内存地址中,我要根据这个地址去找,再对main中数组的值进行修改。
时按引用传递的主要形式为①接口 ②类 ③数组。在按值传递过程中,基本数据类型 short int long float double char byte boolean按值传递调用函数并不会改变在原函数中的值。