* 如果是基本数据类型 ,此时赋值的时变量所保存的数据值
* 如果是引用数据类型 ,此时赋值的是变量所保存的数据的地址值
public static void main(String[] args) { // ********基本数据类型***** int m = 10; int n = m; System.out.println("m:" + m + "n:" + n); m = 20; System.out.println("m:" + m + "n:" + n); // ************引用数据类型*************** Order o1 = new Order(); o1.orderId = 1001; Order o2 = o1; // 创建的对象的地址值 赋给了o2 ,,都指向堆空间中同一个地址值 o2.orderId = 1002; System.out.println(o1.orderId + "" + o2.orderId); } } class Order { int orderId; }
方法的形参的传递机制,值传递
1.形参:方法定义的时候,声明的小括号内的参数
2.实参,方法调用的时候,实际传递给形参的数据
结论:
①如果参数是基本数据类型 ,此时实参赋给形参是真实存储的数据值
②如果参数是引用数据类型 ,此时实参赋给形参的是实参存储数据的地址值
public static void main(String[] args) { // 调换两个变量的值 int m = 10; int n = 20; ValueTransferTest1 vtt = new ValueTransferTest1();
// 调用方法 m,n没有调换 vtt.swap(m, n); System.out.println("m:" + m + "n:" + n); //m:10 n:20 } public void swap(int m, int n) { int temp = m; m = n; n = temp; }
其中出现的问题是,调用 swap方法之后,上面的代码输出的是m=10,n=20,因为,在调用swap方法的时候,m,n已经调用成功,但是 swap 方法执行完成之后,就被销毁了,,,, 在main方法中的变量m,n依然有效,,所以输出m=10;n=20.
内存解析:
但是对于引用数据类型,内存解析
由于赋的是地址值,所以调用swap方法交换成功后,输出 m=20;n=10.