* 如果是基本数据类型 ,此时赋值的时变量所保存的数据值
* 如果是引用数据类型 ,此时赋值的是变量所保存的数据的地址值
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.