JAVA的值传递
之前总是觉得基本数据类型是值传递,引用数据类型是地址传递。应该会有很多和我有一样想法的小伙伴,其实不然;
不管是什么数据类型,都是用的值传递;画了一个大概的流程图
user1为实参,指向堆空间的一个user对象。当进行传递的时候,会copy一个新的变量副本user2。那么user2就是我们的形参,指向的也是同一个堆中的user对象。这也就是为什么我们在调用方法内修改了user对象的属性值,user1指向的对象也会受到影响;
百度百科发现:值传递是指在调用函数时将实参复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
为什么会说不会影响到实参呢,但是我们会发现我们操作之后会影响到实参;
这就是这里面的最大的一个误区。我们从始至终修改的就是user2(形参)中的属性!而不是修改的user2本身。而user2中的属性并不是形参。真正的形参是user本身;如果我们在方法中,让user2 = null;就会发现这种是不会影响到实参user1的。也就证明了确实值传递,形参的改变不会影响到实参。
之前是对对象的维度有一定的误解。现在终于豁然开朗。故记录下来,希望看到的人也能和我可以彻底明白。