一,关于变量赋值:
package day22;
/*
* 关于变量的赋值:
*
* 1.如果变量是基本数据类型,此时,赋值的是变量所保存的数组值。
* 2.如果变量是引用数据类型,此时,赋值的是变量所保持的数据的地址值。
* 引用数据类型变量存两种数据:null , 地址值
* 地址值相同的话,通过一个变量去修改,会导致原来的对象数据改变。
*/
public class ValueTransferTest {
public static void main(String[] args) {
System.out.println("--------基本数据类型--------");
//1.如果变量是基本数据类型,此时,赋值的是变量所保存的数组值。
int m = 10;
int n = m;
System.out.println("m=" + m + ",n=" + n);
System.out.println();
System.out.println("--------引用数据类型--------");
Order o1 = new Order();
Order o3 = new Order();
o1.orderId = 1001;
//2.如果变量是引用数据类型,此时,赋值的是变量所保持的数据的地址值。
Order o2 = o1;
System.out.println("o1的地址值:" + o1);
System.out.println("o2的地址值:" + o2);
System.out.println("o3的地址值:" + o3);
System.out.println();
System.out.println("改动前:");
System.out.println(o1.orderId);
System.out.println(o2.orderId);
System.out.println();
//通过一个变量去修改,会导致原来的对象数据改变。
o2.orderId = 1002;
System.out.println("改动后:");
System.out.println(o1.orderId);
System.out.println(o2.orderId);
}
}
class Order{
int orderId;
}
二,值传递机制:
方法的形参传递机制:值传递
1. 知道什么是形参,什么是实参?
形参:方法定义时,声明的小括号内的参数
实参:方法调用时,实际传递给形参的数据
2. 值传递机制:
2.1 针对参数是基本数据类型:
/*
* 针对参数是基本数据类型
* 如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值。
*/
public class ValueTransferTest1 {
public static void main(String[] args) {
int m = 10;
int n = 20;
System.out.println("交换前:m = " + m + ", n = " + n);
// int temp = m;
// m = n;
// n = temp;
ValueTransferTest1 test = new ValueTransferTest1();
//如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值。
test.swap(m, n);
System.out.println("交换后:m = " + m + ", n = " + n);
/*总结:
* 交换不了,因为传递过去的是普通的数据,
* 在 swap 方法中交换了之后,没有返回。所以m和n自己本身没有改变。
* */
}
public void swap(int m,int n) {
int temp = m;
m = n;
n = temp;
}
}
值传递机制(基本数据类型)
2.2 针对参数是引用数据类型
/*
* 针对参数是引用数据类型
* 传递参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值。
*/
public class ValueTransferTest2 {
public static void main(String[] args) {
Data data = new Data();
data.m = 10;
data.n = 20;
System.out.println("交换前:m=" + data.m + ", n=" + data.n);
ValueTransferTest2 test = new ValueTransferTest2();
//如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值。
test.swap(data);
System.out.println("交换后:m=" + data.m + ", n=" + data.n);
/*
* 总结:m 和 n 交换位置成功。为什么呢?
* 传递参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值。
* 地址值改变了,里面的数据自然也就跟着改变。
*/
}
public void swap(Data data) { //形参是引用数据类型
int temp = data.m;
data.m = data.n;
data.n = temp;
}
}
class Data{
int m;
int n;
}
值传递机制(引用数据类型)
3. 值传递练习题:
尝试一下画出内存图
值传递机制练习题
我的答案(有点丑):栈空间先进后出