数组是遇到的第一个引用类型 数组本质上是引用类型,是对象,和基本数据类型有很大的区别 1. 空间存储的位置 (1)内存 (2)栈(Stack) 堆(Heap) 在栈内:1.局部变量 2.形参(paramaters) 【注】在子函数中不可以修改主函数的变量值,传参数时是值传递,传递参数是一份拷贝内容 2. 数组类型(引用类型 reference)
void main(){ int[] array(栈区) = {1,2,3,4,5}(堆区) method1(); //数组不变 method2(); // 数组变为{1,2,200,4,5} } void method1(int[] array){ array = new int[10]; //array 变成1-10 //引用传递也是值传递 } void method2(int[] array){ array[2] = 200; } *【注】通过动态方式,将array指向新的数组,引用指向的新位置的改变不会影响实参
默认值: 0的各个类型的表示 byte、short、int、log —— 0 float、double —— 0.0 char —— 0x0000 boolean —— false reference —— null 【注】 1.局部变量不可以享用默认值 2.不初始化数组每个元素都是默认值 3.类中的属性、静态属性都可以享受默认值
【总结】 1. 方法调用过程中,无论是基本数据类型还是引用数据类型,实参到形参都是值传递,在栈里拷贝了一份。 2. 但引用传递如果改的是对象内部的值,实参 可以感受到变化 3. 引用类型变量:无论引用变量保存在栈上还是堆上,背后的数据(对象)一定是在堆上