二、值类型的赋值与引用类型的赋值
值类型的变量赋值,是将内存中的真实数据复制一份赋给新的变量。那么在赋值之后内存中就将存在两份一模一样的数据。
Demo:
int test1 = 1;
int test2 = test1; // 先将test1的数据复制一份,然后将复制后的新数据交给test2
引用类型的变量赋值,也会有一个复制的动作,但是所复制的东西和值类型的赋值中所复制的不一样。值类型的赋值中所复制的是真实的数据(如上面Demo里的整数1),而引用类型的赋值中复制的只是真实数据的内存地址而已(也就是引用本身的值)。所以在引用类型赋值后,内存中会存在两份引用,而真实数据仍然为一份,并且两份引用都指向这同一份的真实数据。如果把识别卡比做引用,员工数据比做内存中的真实数据,识别卡的工号比做真实数据的内存地址,那么引用类型赋值就相当于:新制作一张识别卡,然后填上同样的工号。这样识别卡就有2张了,但HR处该员工信息还是只有同一份。我们可以使用这两张识别卡,而对这两张不同识别卡的使用却会同时影响到同一员工的数据(比如在大餐厅吃饭扣钱)。
Demo:
class DemoObject // 先自己申明一个类,里面有个计数的int变量和一个让int变量加1的方法
{
private int count=0;
public void Add()
{
count ++;
}
}
DemoObject demo1 = new DemoObject();
demo1.Add(); // 此时demo1的count的值变为1
DemoObject demo2 = demo1; // 引用复制,demo2的count值为1(和demo1的数据一样),而不是0
demo2.Add(); // 执行该句后,demo2的count值为2,而demo1的count值也变为了2
demo1.Add(); // 执行该句后,demo1的count值为3,而demo2的count值也变为了3
浙公网安备 33010602011771号