java值传递和引用传递
java中的值分为两大类:值类型和引用类型
值类型:就是基本数据类型
引用类型:除了基本变量类型之外的所有类型
所有的类型在内存中都会分配一定的存储空间(注:形参在使用的时候也会分配一定的内存储空间,方法调用完毕后空间也自动消失)
基本的数据类型只有一块存储空间(分配在stack中)
引用数据类型有两块存储空间(一块在stack中,一块在heap中)
下面上图:
基本数据类型是按值传递
/**
* Created by yan on 2019/1/21.
*/
public class Demo {
public static void main(String[] args) {
int a = 10;
demo1(a);
System.out.println(a+"主函数中输出的结果");
}
public static void demo1(int a){
a = 100;
System.out.println(a+"demo1方法中输出的结果");
}
public static void demo2(int arr[]){
}
}
由此可见主函数中的int a = 10(实参);并没有对demo(a)产生影响,方法体内对形式参数的操作不会影响实际参数的值
引用数据类型是按引用传递
/**
* Created by yan on 2019/1/21.
*/
public class Demo {
public static void main(String[] args) {
int[] arr = new int[1];//默认arr[0] = 0
System.out.println(arr[0]+"主函数中调用demo2方法前输出的");
demo2(arr);
System.out.println(arr[0]+"主函数中调用demo2方法后输出的");
}
public static void demo2(int arr[]){
arr[0] = 100;
System.out.println(arr[0]+"demo2方法中输出的结果");
}
}
是不是和前面的基本数据类型值传递有很大的区别
引用数据类型是引用传递,在方法内对形式参数的操作也会影响实际参数的值