JAVA中关于变量赋值的机制(值传递机制)
1.如果变量是基本数据类型,此时赋值的是数据的实际值,即实参传递给形参的是实参的值
2.如果变量是引用数据类型,此时赋值的是保存数据的地址值,即实参传递给形参的是实参的地址
代码示例:
/*
JAVA中关于变量赋值机制
1.如果变量是基本数据类型,此时赋值的是数据的实际值,即实参传递给形参的是实参的值
2.如果变量是引用数据类型,此时赋值的是保存数据的地址值,即实参传递给形参的是实参的地址
*/
public class ValueTransferTest {
public static void main(String[] args){
int m = 10;
int n = m;
System.out.println("m = " + m + ", n = " + n);//m = 10. n = 10
n = 20;
System.out.println("m = " + m + ", n = " + n);//m = 10, n = 20
Number n1 = new Number();
n1.num = 100;
Number n2 = new Number();
n2.num = n1.num;
System.out.println("n1.num = " + n1.num + ", n2.num =" + n2.num);//n1.num = 100, n2.num =100
n2.num = 101;
System.out.println("n1.num = " + n1.num + ", n2.num =" + n2.num);//n1.num = 100, n2.num =101
Number n3 = n1; //指向堆空间中同一个对象实体
System.out.println("n1.num = " + n1.num + ", n3.num =" + n3.num);//n1.num = 100, n3.num =100
n3.num = 111;
System.out.println("n1.num = " + n1.num + ", n3.num =" + n3.num);//n1.num = 111, n3.num =111
//实参传递形参实际数据值
ValueTransferTest v1 = new ValueTransferTest();
int a = 10;
int b = 20;
v1.swap(a,b);//a = 20, b = 10
//传入a,b值之后在swap中进行了交换,但调用结束swap中,a和b被销毁
//实参传递给形参的是真实数据值
//再输出,则是输出main方法的a和b的值,
System.out.println("a = " + a + ", b = " + b);//a = 10, b = 20
//实参传递形参数据地址
Data d1 = new Data();
d1.a = 15;
d1.b = 25;
System.out.println("a = " + d1.a + ", b = " + d1.b);//a = 15, b = 25
//引用数据类型,相当于在swap里面data和d1指向同一个地址
v1.swap(d1);//a = 25, b = 15
System.out.println("a = " + d1.a + ", b = " + d1.b);//a = 25, b = 15
}
public void swap(int a, int b){
int tem = a;
a = b;
b = tem;
System.out.println("a = " + a + ", b = " + b);
}
public void swap(Data data){
int tem = data.a;
data.a = data.b;
data.b = tem;
System.out.println("a = " + data.a + ", b = " + data.b);
}
}
class Number{
int num;
}
class Data{
int a;
int b;
}